forked from VoxeLibre/VoxeLibre
Merge branch 'master' into mineclone5
This commit is contained in:
commit
7f28f4a9d1
|
@ -7,13 +7,11 @@ But first, some things to note:
|
||||||
MineClone 2's development target is to make a free software clone of Minecraft,
|
MineClone 2's development target is to make a free software clone of Minecraft,
|
||||||
***version 1.12***, ***PC edition***, *** + Optifine features supported by the Minetest Engine ***.
|
***version 1.12***, ***PC edition***, *** + Optifine features supported by the Minetest Engine ***.
|
||||||
|
|
||||||
MineClone 2 is maintained by two persons. Namely, kay27 and EliasFleckenstein. You can find us
|
MineClone 2 is maintained by three persons. Namely, kay27, EliasFleckenstein and jordan4ibanez. You can find us
|
||||||
in the Minetest forums (forums.minetest.net), in IRC in the #minetest
|
in the Minetest forums (forums.minetest.net), in IRC in the #mineclone2
|
||||||
channel on irc.freenode.net. And finally, you can send e-mails to
|
channel on irc.freenode.net. And finally, you can send e-mails to
|
||||||
<eliasfleckenstein@web.de> or <kay27@bk.ru>.
|
<eliasfleckenstein@web.de> or <kay27@bk.ru>.
|
||||||
|
|
||||||
There is **no** guarantee we will accept anything from anybody.
|
|
||||||
|
|
||||||
By sending us patches or asking us to include your changes in this game,
|
By sending us patches or asking us to include your changes in this game,
|
||||||
you agree that they fall under the terms of the LGPLv2.1, which basically
|
you agree that they fall under the terms of the LGPLv2.1, which basically
|
||||||
means they will become part of a free software.
|
means they will become part of a free software.
|
||||||
|
@ -26,8 +24,7 @@ For small and medium changes:
|
||||||
|
|
||||||
* Fork the repository
|
* Fork the repository
|
||||||
* Do your change in a new branch
|
* Do your change in a new branch
|
||||||
* Upload the repository somewhere where it can be accessed from the Internet and
|
* Create a pull request to get your changes merged into master
|
||||||
notify us
|
|
||||||
|
|
||||||
For small changes, sending us a patch is also good.
|
For small changes, sending us a patch is also good.
|
||||||
|
|
||||||
|
@ -41,40 +38,30 @@ reserve the right to revert everything that we don't like.
|
||||||
For bigger changes, we strongly recommend to use feature branches and
|
For bigger changes, we strongly recommend to use feature branches and
|
||||||
discuss with me first.
|
discuss with me first.
|
||||||
|
|
||||||
Contributors will be credited in `README.md`.
|
If your code causes bugs and crashes, it is your responsibility to fix them as soon as possible.
|
||||||
|
|
||||||
## Quality remarks
|
We mostly use plain merging rather than rebasing or squash merging.
|
||||||
Again: There is ***no*** guarantee we will accept anything from anybody.
|
|
||||||
But we will gladly take in code from others when we feel it saves us work
|
|
||||||
in the long run.
|
|
||||||
|
|
||||||
### Inclusion criteria
|
Your commit names should be relatively descriptive, e.g. when saying "Fix #issueid", the commit message should also contain the title of the issue.
|
||||||
Depending on what you add, the chances for inclusion vary:
|
|
||||||
|
|
||||||
### High chance for inclusion
|
Contributors will be credited in `CREDITS.md`.
|
||||||
* Gameplay features in Minecraft which are missing in MineClone 2
|
|
||||||
|
|
||||||
### Medium chance for inclusion (discuss first)
|
## Features > 1.12
|
||||||
* Features which don't a impact on gameplay
|
|
||||||
* GUI improvement
|
|
||||||
* Features from pocket or console edition
|
|
||||||
|
|
||||||
### Low chance for inclusion (discuss/optimize first)
|
If you want to make a feature that was added in a Minecraft version later than 1.12, you should fork MineClone5 (mineclone5 branch in the repository) and add your changes to this.
|
||||||
* Overhaul of architecture / mod structure
|
|
||||||
* Mass-itemstring changes all over the place
|
|
||||||
* Added files have a unusual high file size
|
|
||||||
* Indentation looks like crazy
|
|
||||||
* Single commits which add several unrelated things
|
|
||||||
* Gameplay features which don't exist in Minecraft
|
|
||||||
|
|
||||||
### Instant rejection
|
## What we accept
|
||||||
* Proprietary **anything**
|
|
||||||
* Code contains `minetest.env` anywhere
|
|
||||||
|
|
||||||
## Coding style guide
|
* Every MC features up to version 1.12 JE.
|
||||||
* Indentations should reflect the code flow
|
* Every already finished and working good features from versions above (only when making a MineClone5 PR / Contribution).
|
||||||
* Use tabs, not spaces for indentation (tab size = 8)
|
* Except features which couldn't be done easily and bugfree because of Minetest engine limitations. Eg. we CAN extend world boundaries by playing with map chunks, just teleporting player onto next layer after 31000 , but it would cost too much (time, code, bugs, performance, stability, etc).
|
||||||
* Never use `minetest.env`
|
* Some features, approved by the rest of the community, I mean maybe some voting and really missing any negative feedback.
|
||||||
|
|
||||||
|
## What we reject
|
||||||
|
|
||||||
|
* Any features which cause critical bugs, sending them to rework/fix or trying to fix immediately.
|
||||||
|
* Some small portions of big entirely missing features which just definitely break gamplay balance give nothing useful
|
||||||
|
* Controversial features, which some people support while others do not should be discussed well, with publishing forum announcements, at least during the week. In case if there are still doubts - send them into the mod.
|
||||||
|
|
||||||
## Reporting bugs
|
## Reporting bugs
|
||||||
Report all bugs and missing Minecraft features here:
|
Report all bugs and missing Minecraft features here:
|
||||||
|
|
|
@ -0,0 +1,117 @@
|
||||||
|
# Credits
|
||||||
|
|
||||||
|
## Creator of MineClone
|
||||||
|
* davedevils
|
||||||
|
|
||||||
|
## Creator of MineClone2
|
||||||
|
* Wuzzy
|
||||||
|
|
||||||
|
## Maintainers
|
||||||
|
* Fleckenstein
|
||||||
|
* kay27
|
||||||
|
* oilboi
|
||||||
|
|
||||||
|
## Developers
|
||||||
|
* bzoss
|
||||||
|
* AFCMS
|
||||||
|
* epCode
|
||||||
|
* ryvnf
|
||||||
|
* iliekprogrammar
|
||||||
|
* MysticTempest
|
||||||
|
* Rootyjr
|
||||||
|
* Nicu
|
||||||
|
* aligator
|
||||||
|
* Code-Sploit
|
||||||
|
|
||||||
|
## Contributors
|
||||||
|
* 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
|
||||||
|
* NO11
|
||||||
|
* Saku Laesvuori
|
||||||
|
* Yukitty
|
||||||
|
* ZedekThePD
|
||||||
|
* aldum
|
||||||
|
* dBeans
|
||||||
|
* nickolas360
|
||||||
|
* yutyo
|
||||||
|
* ztianyang
|
||||||
|
* j45
|
||||||
|
|
||||||
|
## MineClone5
|
||||||
|
* kay27
|
||||||
|
* Debiankaios
|
||||||
|
* epCode
|
||||||
|
* NO11
|
||||||
|
* j45
|
||||||
|
|
||||||
|
## Original Mod Authors
|
||||||
|
* Wuzzy
|
||||||
|
* Fleckenstein
|
||||||
|
* BlockMen
|
||||||
|
* TenPlus1
|
||||||
|
* PilzAdam
|
||||||
|
* ryvnf
|
||||||
|
* stujones11
|
||||||
|
* Arcelmi
|
||||||
|
* celeron55
|
||||||
|
* maikerumine
|
||||||
|
* GunshipPenguin
|
||||||
|
* Qwertymine3
|
||||||
|
* Rochambeau
|
||||||
|
* rubenwardy
|
||||||
|
* stu
|
||||||
|
* oilboi
|
||||||
|
* 4aiman
|
||||||
|
* Kahrl
|
||||||
|
* Krock
|
||||||
|
* UgnilJoZ
|
||||||
|
* lordfingle
|
||||||
|
* 22i
|
||||||
|
* bzoss
|
||||||
|
* kilbith
|
||||||
|
* xeranas
|
||||||
|
* kddekadenz
|
||||||
|
* sofar
|
||||||
|
* 4Evergreen4
|
||||||
|
* jordan4ibanez
|
||||||
|
* paramat
|
||||||
|
|
||||||
|
## 3D Models
|
||||||
|
* 22i
|
||||||
|
* tobyplowy
|
||||||
|
* epCode
|
||||||
|
|
||||||
|
## Textures
|
||||||
|
* XSSheep
|
||||||
|
* Wuzzy
|
||||||
|
* kingoscargames
|
||||||
|
* leorockway
|
||||||
|
* xMrVizzy
|
||||||
|
* yutyo
|
||||||
|
|
||||||
|
## Translations
|
||||||
|
* Wuzzy
|
||||||
|
* Rocher Laurent
|
||||||
|
* wuniversales
|
||||||
|
* kay27
|
||||||
|
* pitchum
|
||||||
|
|
||||||
|
## Special thanks
|
||||||
|
* 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
|
|
@ -0,0 +1,52 @@
|
||||||
|
# Legal information
|
||||||
|
This is a fan game, not developed or endorsed by Mojang AB.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
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: <https://www.planetminecraft.com/texture_pack/131pixel-perfection/>
|
||||||
|
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.
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
# Missing features in Minetest to recreate Minecraft features
|
|
||||||
|
|
||||||
A side goal of the MineClone 2 project is to find any shortcomings of Minetest which make it impossible to recreate a Minecraft feature exactly.
|
|
||||||
This file lists some of the missing features in Minetest which MineClone 2 would require.
|
|
||||||
|
|
||||||
## No workaround possible
|
|
||||||
For these features, no easy Lua workaround could be found.
|
|
||||||
|
|
||||||
### Lua API
|
|
||||||
#### Tools/wielded item
|
|
||||||
- “Lock” hotbar for a brief time after using an item, making it impossible to switch item or to attach/mine/build until the delay is over (For eating with delay)
|
|
||||||
- Tool charging: Holding down the mouse and releasing it, applying a “power level” (For bow and arrows, more charge = higher arrow range) ([issue 5212](https://github.com/minetest/minetest/issues/5212))
|
|
||||||
- [Dual Wielding](http://minecraft.gamepedia.com/Dual_wield)
|
|
||||||
- Eating/drinking animation ([issue 2811](https://github.com/minetest/minetest/issues/2811))
|
|
||||||
|
|
||||||
#### Nodes
|
|
||||||
- Light level 15 for nodes (not sunlight)
|
|
||||||
- Nodes makes light level drop by 2 or or more per node ([issue 5209](https://github.com/minetest/minetest/issues/5209))
|
|
||||||
|
|
||||||
## Interface
|
|
||||||
- Inventory: Hold down right mouse button while holding an item stack to drop items into the slots as you move the mouse. Makes crafting MUCH faster
|
|
||||||
- Sneak+Leftclick on crafting output crafts as many items as possible and immediately puts it into the player inventory ([issue 5211](https://github.com/minetest/minetest/issues/5211))
|
|
||||||
- Sneak+click puts items in different inventories depending on the item type (maybe group-based)? Required for sneak-clicking to armor slots
|
|
||||||
|
|
||||||
## Workaround theoretically possible
|
|
||||||
For these features, a workaround (or hack ;-)) by using Lua is theoretically possible. But engine support would be clearly better, more performant, more reliable, etc.
|
|
||||||
|
|
||||||
### Lua API
|
|
||||||
#### Nodes
|
|
||||||
- Change walking speed on block (soul sand)
|
|
||||||
- Change jumping height on block (soul sand),
|
|
||||||
- Change object movement speed *through* a block, but for non-liquids (for cobweb)
|
|
||||||
- Add `on_walk_over` event
|
|
||||||
- Set frequency in which players lose breath. 2 seconds are hardcoded in Minetest, in Minecraft it's 1 second
|
|
||||||
- Set damage frequency of `damage_per_second`. In Minecraft many things damage players every half-second rather than every second
|
|
||||||
- Possible to damage players directly when they are with the head inside. This allows to add Minecraft-like suffocation
|
|
||||||
- Sneak+click on inventory slot should be able to put items into additional “fallback inventories” if the first inventory is full. Useful for large chests
|
|
||||||
|
|
||||||
#### Nice-to-haye
|
|
||||||
- Utility function to rotate pillar-like nodes, requiring only 3 possible orientations (X, Y, Z). Basically this is `minetest.rotate_node` but with less orientations; the purpur pillar would mess up if a mirrored rotation would be possible. This is already implemented in MCL2, See `mcl_util` for more infos
|
|
194
README.md
194
README.md
|
@ -2,7 +2,7 @@
|
||||||
An unofficial Minecraft-like game for Minetest. Forked from MineClone by davedevils.
|
An unofficial Minecraft-like game for Minetest. Forked from MineClone by davedevils.
|
||||||
Developed by many people. Not developed or endorsed by Mojang AB.
|
Developed by many people. Not developed or endorsed by Mojang AB.
|
||||||
|
|
||||||
Version: 0.71.0
|
Version: 0.72.0 (in development)
|
||||||
|
|
||||||
### Gameplay
|
### Gameplay
|
||||||
You start in a randomly-generated world made entirely of cubes. You can explore
|
You start in a randomly-generated world made entirely of cubes. You can explore
|
||||||
|
@ -65,16 +65,8 @@ map builders. They can not be obtained in-game or in the creative inventory.
|
||||||
Use the `/giveme` chat command to obtain them. See the in-game help for
|
Use the `/giveme` chat command to obtain them. See the in-game help for
|
||||||
an explanation.
|
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
|
## Installation
|
||||||
This game requires [Minetest](http://minetest.net) to run (version 5.0.0 or
|
This game requires [Minetest](http://minetest.net) to run (version 5.3.0 or
|
||||||
later). So you need to install Minetest first. Only stable versions of Minetest
|
later). So you need to install Minetest first. Only stable versions of Minetest
|
||||||
are officially supported.
|
are officially supported.
|
||||||
There is no support for running MineClone 2 in development versions of Minetest.
|
There is no support for running MineClone 2 in development versions of Minetest.
|
||||||
|
@ -83,23 +75,37 @@ 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
|
“games” directory of your Minetest data directory. Consult the help of
|
||||||
Minetest to learn more.
|
Minetest to learn more.
|
||||||
|
|
||||||
|
## Reporting bugs
|
||||||
|
Please report all bugs and missing Minecraft features here:
|
||||||
|
|
||||||
|
<https://git.minetest.land/MineClone2/MineClone2/issues>
|
||||||
|
|
||||||
|
## Chating with the community
|
||||||
|
Join our discord server at:
|
||||||
|
|
||||||
|
<https://discord.gg/84GKcxczG3>
|
||||||
|
|
||||||
## Project description
|
## Project description
|
||||||
The main goal of **MineClone 2** is to be a clone of Minecraft and to be released as free software.
|
The main goal of **MineClone 2** is to be a clone of Minecraft and to be released as free software.
|
||||||
|
|
||||||
* **Target of development: Minecraft, PC Edition, version 1.12** (later known as “Java Edition”)
|
* **Target of development: Minecraft, PC Edition, version 1.12** (later known as “Java Edition”)
|
||||||
* MineClone2 also includes Optifine features supported by the Minetest
|
* MineClone2 also includes Optifine features supported by the Minetest
|
||||||
* Features of later Minecraft versions might sneak in, but they have a low priority
|
* In general, Minecraft is aimed to be cloned as good as possible
|
||||||
* In general, Minecraft is aimed to be cloned as good as Minetest currently permits (no hacks)
|
|
||||||
* Cloning the gameplay has highest priority
|
* Cloning the gameplay has highest priority
|
||||||
* MineClone 2 will use different graphics and sounds, but with a similar style
|
* MineClone 2 will use different assets, but with a similar style
|
||||||
* Cloning the interface has no priority. It will only be roughly imitated
|
* Limitations found in Minetest will be documented in the course of development
|
||||||
* Limitations found in Minetest will be written down and reported in the course of development
|
* Features of later Minecraft versions are collected in the mineclone5 branch
|
||||||
|
|
||||||
|
## Using features from newer versions of Minecraft
|
||||||
|
For > 1.12 features, checkout MineClone5. It includes features from newer Minecraft versions.
|
||||||
|
Download it here: https://git.minetest.land/MineClone2/MineClone2/src/branch/mineclone5
|
||||||
|
|
||||||
## Completion status
|
## Completion status
|
||||||
This game is currently in **alpha** stage.
|
This game is currently in **beta** stage.
|
||||||
It is playable, but unfinished, many bugs are to be expected.
|
It is playable, but not yet feature-complete.
|
||||||
Backwards-compability is *not* guaranteed, updating your world might cause small and
|
Backwards-compability is not entirely guaranteed, updating your world might cause small bugs.
|
||||||
big bugs (such as “missing node” errors or even crashes).
|
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:
|
The following main features are available:
|
||||||
|
|
||||||
|
@ -128,7 +134,7 @@ The following main features are available:
|
||||||
* Clock
|
* Clock
|
||||||
* Compass
|
* Compass
|
||||||
* Sponge
|
* Sponge
|
||||||
* Slime block (does not interact with redstone)
|
* Slime block
|
||||||
* Small plants and saplings
|
* Small plants and saplings
|
||||||
* Dyes
|
* Dyes
|
||||||
* Banners
|
* Banners
|
||||||
|
@ -140,19 +146,19 @@ The following main features are available:
|
||||||
* Creative inventory
|
* Creative inventory
|
||||||
* Farming
|
* Farming
|
||||||
* Writable books
|
* Writable books
|
||||||
* A few server commands
|
* Commands
|
||||||
|
* Villages
|
||||||
|
* The End
|
||||||
* And more!
|
* And more!
|
||||||
|
|
||||||
The following features are incomplete:
|
The following features are incomplete:
|
||||||
|
|
||||||
* Generated structures (especially villages)
|
|
||||||
* Some monsters and animals
|
* Some monsters and animals
|
||||||
* Redstone-related things
|
* Redstone-related things
|
||||||
* The End
|
|
||||||
* Special minecarts
|
* Special minecarts
|
||||||
* A couple of non-trivial blocks and items
|
* A couple of non-trivial blocks and items
|
||||||
|
|
||||||
Bonus features (not found in Minecraft 1.11):
|
Bonus features (not found in Minecraft 1.12):
|
||||||
|
|
||||||
* Built-in crafting guide which shows you crafting and smelting recipes
|
* 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
|
* In-game help system containing extensive help about gameplay basics, blocks, items and more
|
||||||
|
@ -177,148 +183,14 @@ Technical differences from Minecraft:
|
||||||
* Different textures (Pixel Perfection)
|
* Different textures (Pixel Perfection)
|
||||||
* Different sounds (various sources)
|
* Different sounds (various sources)
|
||||||
* Different engine (Minetest)
|
* Different engine (Minetest)
|
||||||
|
* Different easter eggs
|
||||||
|
|
||||||
… and finally, MineClone 2 is free software (“free” as in “freedom”)!
|
… and finally, MineClone 2 is free software (“free” as in “freedom”)!
|
||||||
|
|
||||||
## Reporting bugs
|
|
||||||
Please report all bugs and missing Minecraft features here:
|
|
||||||
|
|
||||||
<https://git.minetest.land/MineClone2/MineClone2/issues>
|
|
||||||
|
|
||||||
## Chating with the community
|
|
||||||
Join our discord server at:
|
|
||||||
|
|
||||||
<https://discord.gg/84GKcxczG3>
|
|
||||||
|
|
||||||
## Other readme files
|
## Other readme files
|
||||||
|
|
||||||
* `LICENSE.txt`: The GPLv3 license text
|
* `LICENSE.txt`: The GPLv3 license text
|
||||||
* `CONTRIBUTING.md`: Information for those who want to contribute
|
* `CONTRIBUTING.md`: Information for those who want to contribute
|
||||||
* `MISSING_ENGINE_FEATURES.md`: List of missing features in Minetest which MineClone 2 would need for improvement
|
|
||||||
* `API.md`: For Minetest modders who want to mod this game
|
* `API.md`: For Minetest modders who want to mod this game
|
||||||
|
* `LEGAL.md`: Legal information
|
||||||
## Credits
|
* `CREDITS.md`: List of everyone who contributed
|
||||||
There are so many people to list (sorry). Check out the respective mod directories for details. This section is only a rough overview of the core authors of this game.
|
|
||||||
|
|
||||||
### Coding
|
|
||||||
* [Wuzzy](https://forum.minetest.net/memberlist.php?mode=viewprofile&u=3082): Main programmer of most mods (retired)
|
|
||||||
* davedevils: Creator of MineClone on which MineClone 2 is based on
|
|
||||||
* [ex-bart](https://github.com/ex-bart): Redstone comparators
|
|
||||||
* [Rootyjr](https://github.com/Rootyjr): Fishing rod and bugfixes
|
|
||||||
* [aligator](https://github.com/aligator): Improvement of doors
|
|
||||||
* [ryvnf](https://github.com/ryvnf): Explosion mechanics
|
|
||||||
* MysticTempest: Bugfixes
|
|
||||||
* [bzoss](https://github.com/bzoss): Status effects, potions, brewing stand
|
|
||||||
* kay27 <kay27@bk.ru>: Experience system, bugfixes, optimizations (Current maintainer)
|
|
||||||
* [EliasFleckenstein03](https://github.com/EliasFleckenstein03): End crystals, enchanting, burning mobs / players, animated chests, bugfixes (Current maintainer)
|
|
||||||
* epCode: Better player animations, new logo
|
|
||||||
* 2mac: Fix bug with powered rail
|
|
||||||
* Lots of other people: TO BE WRITTEN (see mod directories for details)
|
|
||||||
|
|
||||||
#### Mod credits (summary)
|
|
||||||
|
|
||||||
* `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
|
|
||||||
* Most other mods: Wuzzy
|
|
||||||
|
|
||||||
Detailed credits for each mod can be found in the individual mod directories.
|
|
||||||
|
|
||||||
### Graphics
|
|
||||||
* [XSSheep](http://www.minecraftforum.net/members/XSSheep): Main author; creator of the Pixel Perfection resource pack of Minecraft 1.11
|
|
||||||
* [Wuzzy](https://forum.minetest.net/memberlist.php?mode=viewprofile&u=3082): Main menu imagery and various edits and additions of texture pack
|
|
||||||
* [kingoscargames](https://github.com/kingoscargames): Various edits and additions of existing textures
|
|
||||||
* [leorockway](https://github.com/leorockway): Some edits of mob textures
|
|
||||||
* [xMrVizzy](https://minecraft.curseforge.com/members/xMrVizzy): Glazed terracotta (textures are subject to be replaced later)
|
|
||||||
* yutyo <tanakinci2002@gmail.com>: MineClone 2 logo
|
|
||||||
* Other authors: GUI images
|
|
||||||
|
|
||||||
### Translations
|
|
||||||
* Wuzzy: German
|
|
||||||
* Rocher Laurent <rocherl@club-internet.fr>: French
|
|
||||||
* wuniversales: Spanish
|
|
||||||
* kay27 <kay27@bk.ru>: Russian
|
|
||||||
|
|
||||||
### Models
|
|
||||||
* [22i](https://github.com/22i): Creator of all models
|
|
||||||
* [tobyplowy](https://github.com/tobyplowy): UV-mapping fixes to said models
|
|
||||||
|
|
||||||
### Sounds and music
|
|
||||||
Various sources. See the respective mod directories for details.
|
|
||||||
|
|
||||||
### Special thanks
|
|
||||||
|
|
||||||
* davedevils for starting MineClone, the original version of this game
|
|
||||||
* Wuzzy for starting and maintaining MineClone2 for several years
|
|
||||||
* celeron55 for creating Minetest
|
|
||||||
* Minetest's modding community for providing a huge selection of mods, some of which ended up in MineClone 2
|
|
||||||
* 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
|
|
||||||
* XSSheep for creating the Pixel Perfection resource pack
|
|
||||||
* [22i](https://github.com/22i) for providing great models and support
|
|
||||||
* [maikerumine](http://github.com/maikerumine) for kicking off mobs and biomes
|
|
||||||
|
|
||||||
## Info for programmers
|
|
||||||
You find interesting and useful infos in `API.md`.
|
|
||||||
|
|
||||||
## Legal information
|
|
||||||
This is a fan game, not developed or endorsed by Mojang AB.
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
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: <https://www.planetminecraft.com/texture_pack/131pixel-perfection/>
|
|
||||||
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.
|
|
||||||
|
|
|
@ -66,3 +66,58 @@ function mcl_particles.delete_node_particlespawners(pos)
|
||||||
end
|
end
|
||||||
return false
|
return false
|
||||||
end
|
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 min = math.min
|
||||||
|
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
|
||||||
|
mcl_particles.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 = min(exptime, (7.0/8.0 * (exptime + 0.1) + 0.1))
|
||||||
|
smoke_pdef.texture = "mcl_particles_smoke_anim.png^[colorize:#000000:" ..colorize
|
||||||
|
|
||||||
|
mcl_particles.add_node_particlespawner(pos, smoke_pdef, "high")
|
||||||
|
|
||||||
|
table.insert(smoke_pdef_cached[name], table.copy(smoke_pdef))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
|
@ -27,9 +27,9 @@ mcl_credits.people = {
|
||||||
"Rootyjr",
|
"Rootyjr",
|
||||||
"Nicu",
|
"Nicu",
|
||||||
"aligator",
|
"aligator",
|
||||||
|
"Code-Sploit",
|
||||||
}},
|
}},
|
||||||
{"Contributors", 0x52FF00, {
|
{"Contributors", 0x52FF00, {
|
||||||
"Code-Sploit",
|
|
||||||
"Laurent Rocher",
|
"Laurent Rocher",
|
||||||
"HimbeerserverDE",
|
"HimbeerserverDE",
|
||||||
"TechDudie",
|
"TechDudie",
|
||||||
|
@ -55,6 +55,7 @@ mcl_credits.people = {
|
||||||
"nickolas360",
|
"nickolas360",
|
||||||
"yutyo",
|
"yutyo",
|
||||||
"ztianyang",
|
"ztianyang",
|
||||||
|
"j45",
|
||||||
}},
|
}},
|
||||||
{"MineClone5", 0xA60014, {
|
{"MineClone5", 0xA60014, {
|
||||||
"kay27",
|
"kay27",
|
||||||
|
@ -63,6 +64,38 @@ mcl_credits.people = {
|
||||||
"NO11",
|
"NO11",
|
||||||
"j45",
|
"j45",
|
||||||
}},
|
}},
|
||||||
|
{"Original Mod Authors", 0x343434, {
|
||||||
|
"Wuzzy",
|
||||||
|
"Fleckenstein",
|
||||||
|
"BlockMen",
|
||||||
|
"TenPlus1",
|
||||||
|
"PilzAdam",
|
||||||
|
"ryvnf",
|
||||||
|
"stujones11",
|
||||||
|
"Arcelmi",
|
||||||
|
"celeron55",
|
||||||
|
"maikerumine",
|
||||||
|
"GunshipPenguin",
|
||||||
|
"Qwertymine3",
|
||||||
|
"Rochambeau",
|
||||||
|
"rubenwardy",
|
||||||
|
"stu",
|
||||||
|
"oilboi",
|
||||||
|
"4aiman",
|
||||||
|
"Kahrl",
|
||||||
|
"Krock",
|
||||||
|
"UgnilJoZ",
|
||||||
|
"lordfingle",
|
||||||
|
"22i",
|
||||||
|
"bzoss",
|
||||||
|
"kilbith",
|
||||||
|
"xeranas",
|
||||||
|
"kddekadenz",
|
||||||
|
"sofar",
|
||||||
|
"4Evergreen4",
|
||||||
|
"jordan4ibanez",
|
||||||
|
"paramat",
|
||||||
|
}},
|
||||||
{"3D Models", 0x0019FF, {
|
{"3D Models", 0x0019FF, {
|
||||||
"22i",
|
"22i",
|
||||||
"tobyplowy",
|
"tobyplowy",
|
||||||
|
|
|
@ -47,94 +47,16 @@ local alldirs=
|
||||||
{ x = 0, y = 0, z = 1}
|
{ x = 0, y = 0, z = 1}
|
||||||
}
|
}
|
||||||
|
|
||||||
-- 3 exptime variants because the animation is not tied to particle expiration time.
|
local smoke_pdef = {
|
||||||
-- 3 colorized variants to imitate minecraft's
|
amount = 0.009,
|
||||||
local smoke_pdef_base = {
|
maxexptime = 4.0,
|
||||||
amount = 0.001,
|
|
||||||
time = 0,
|
|
||||||
-- minpos = vector.add(pos, { x = -0.45, y = -0.45, z = -0.45 }),
|
|
||||||
-- maxpos = vector.add(pos, { x = 0.45, y = 0.45, z = 0.45 }),
|
|
||||||
minvel = { x = -0.1, y = 0.3, z = -0.1 },
|
minvel = { x = -0.1, y = 0.3, z = -0.1 },
|
||||||
maxvel = { x = 0.1, y = 1.6, z = 0.1 },
|
maxvel = { x = 0.1, y = 1.6, z = 0.1 },
|
||||||
-- minexptime = 3 exptime variants,
|
|
||||||
-- maxexptime = 3 exptime variants
|
|
||||||
minsize = 4.0,
|
minsize = 4.0,
|
||||||
maxsize = 4.5,
|
maxsize = 4.5,
|
||||||
-- texture = "mcl_particles_smoke_anim.png^[colorize:#000000:(3 colourize variants)",
|
minrelpos = { x = -0.45, y = -0.45, z = -0.45 },
|
||||||
animation = {
|
maxrelpos = { x = 0.45, y = 0.45, z = 0.45 },
|
||||||
type = "vertical_frames",
|
|
||||||
aspect_w = 8,
|
|
||||||
aspect_h = 8,
|
|
||||||
-- length = 3 exptime variants
|
|
||||||
},
|
|
||||||
collisiondetection = true,
|
|
||||||
}
|
}
|
||||||
local smoke_pdef_cached = {}
|
|
||||||
local spawn_smoke = function(pos)
|
|
||||||
local min = math.min
|
|
||||||
local new_minpos = vector.add(pos, { x = -0.45, y = -0.45, z = -0.45 })
|
|
||||||
local new_maxpos = vector.add(pos, { x = 0.45, y = 0.45, z = 0.45 })
|
|
||||||
|
|
||||||
-- populate the cache
|
|
||||||
if not next(smoke_pdef_cached) then
|
|
||||||
-- 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.75, 1.5, 4.0 }
|
|
||||||
local colorizes = { "199", "209", "243" } -- round(78%, 82%, 90% of 256) - 1
|
|
||||||
|
|
||||||
local id = 1
|
|
||||||
for _,exptime in ipairs(exptimes) do
|
|
||||||
for _,colorize in ipairs(colorizes) do
|
|
||||||
smoke_pdef_base.minpos = new_minpos
|
|
||||||
smoke_pdef_base.maxpos = new_maxpos
|
|
||||||
smoke_pdef_base.maxexptime = exptime
|
|
||||||
smoke_pdef_base.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_base.minexptime = min(exptime, (7.0/8.0 * (exptime + 0.1) + 0.1))
|
|
||||||
smoke_pdef_base.texture = "mcl_particles_smoke_anim.png^[colorize:#000000:" ..colorize
|
|
||||||
|
|
||||||
smoke_pdef_cached[id] = table.copy(smoke_pdef_base)
|
|
||||||
|
|
||||||
mcl_particles.add_node_particlespawner(pos, smoke_pdef_cached[id], "high")
|
|
||||||
|
|
||||||
id = id + 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- cache already populated
|
|
||||||
else
|
|
||||||
for i, smoke_pdef in ipairs(smoke_pdef_cached) do
|
|
||||||
smoke_pdef.minpos = new_minpos
|
|
||||||
smoke_pdef.maxpos = new_maxpos
|
|
||||||
mcl_particles.add_node_particlespawner(pos, smoke_pdef, "high")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
--[[ Old smoke pdef
|
|
||||||
local spawn_smoke = function(pos)
|
|
||||||
mcl_particles.add_node_particlespawner(pos, {
|
|
||||||
amount = 0.1,
|
|
||||||
time = 0,
|
|
||||||
minpos = vector.add(pos, { x = -0.45, y = -0.45, z = -0.45 }),
|
|
||||||
maxpos = vector.add(pos, { x = 0.45, y = 0.45, z = 0.45 }),
|
|
||||||
minvel = { x = 0, y = 0.5, z = 0 },
|
|
||||||
maxvel = { x = 0, y = 0.6, z = 0 },
|
|
||||||
minexptime = 2.0,
|
|
||||||
maxexptime = 2.0,
|
|
||||||
minsize = 3.0,
|
|
||||||
maxsize = 4.0,
|
|
||||||
texture = "mcl_particles_smoke_anim.png^[colorize:#000000:127",
|
|
||||||
animation = {
|
|
||||||
type = "vertical_frames",
|
|
||||||
aspect_w = 8,
|
|
||||||
aspect_h = 8,
|
|
||||||
length = 2.1,
|
|
||||||
},
|
|
||||||
}, "high")
|
|
||||||
-- ]]
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Items
|
-- Items
|
||||||
|
@ -303,7 +225,7 @@ minetest.register_node("mcl_fire:fire", {
|
||||||
end
|
end
|
||||||
|
|
||||||
fire_timer(pos)
|
fire_timer(pos)
|
||||||
spawn_smoke(pos)
|
mcl_particles.spawn_smoke(pos, "fire", smoke_pdef)
|
||||||
end,
|
end,
|
||||||
on_destruct = function(pos)
|
on_destruct = function(pos)
|
||||||
mcl_particles.delete_node_particlespawners(pos)
|
mcl_particles.delete_node_particlespawners(pos)
|
||||||
|
@ -367,7 +289,7 @@ minetest.register_node("mcl_fire:eternal_fire", {
|
||||||
if has_mcl_portals then --Calling directly minetest.get_modpath consumes 4x more compute time
|
if has_mcl_portals then --Calling directly minetest.get_modpath consumes 4x more compute time
|
||||||
mcl_portals.light_nether_portal(pos)
|
mcl_portals.light_nether_portal(pos)
|
||||||
end
|
end
|
||||||
spawn_smoke(pos)
|
mcl_particles.spawn_smoke(pos, "fire", smoke_pdef)
|
||||||
end,
|
end,
|
||||||
on_destruct = function(pos)
|
on_destruct = function(pos)
|
||||||
mcl_particles.delete_node_particlespawners(pos)
|
mcl_particles.delete_node_particlespawners(pos)
|
||||||
|
@ -627,7 +549,7 @@ minetest.register_lbm({
|
||||||
nodenames = {"group:fire"},
|
nodenames = {"group:fire"},
|
||||||
run_at_every_load = true,
|
run_at_every_load = true,
|
||||||
action = function(pos, node)
|
action = function(pos, node)
|
||||||
spawn_smoke(pos)
|
mcl_particles.spawn_smoke(pos, "fire", smoke_pdef)
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
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: <https://freesound.org/people/Ned Bouhalassa/sounds/8320/>
|
|
@ -0,0 +1,2 @@
|
||||||
|
name = mcl_firework
|
||||||
|
author = NO11, j45
|
|
@ -0,0 +1,17 @@
|
||||||
|
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"},
|
||||||
|
})
|
|
@ -0,0 +1,4 @@
|
||||||
|
local path = minetest.get_modpath("mcl_fireworks")
|
||||||
|
|
||||||
|
dofile(path .. "/register.lua")
|
||||||
|
dofile(path .. "/crafting.lua")
|
|
@ -0,0 +1,3 @@
|
||||||
|
# textdomain: mcl_fireworks
|
||||||
|
Firework Rocket=Feuerwerksrakete
|
||||||
|
Flight Duration:=Flugdauer:
|
|
@ -0,0 +1,69 @@
|
||||||
|
local S = minetest.get_translator("mcl_fireworks")
|
||||||
|
|
||||||
|
player_rocketing = {}
|
||||||
|
|
||||||
|
local help = S("Flight Duration:")
|
||||||
|
local description = S("Firework Rocket")
|
||||||
|
local rocket_sound = function()
|
||||||
|
minetest.sound_play("mcl_fireworks_rocket")
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_craftitem("mcl_fireworks:rocket_1", {
|
||||||
|
description = description,
|
||||||
|
_tt_help = help.." 1",
|
||||||
|
inventory_image = "mcl_fireworks_rocket.png",
|
||||||
|
stack_max = 64,
|
||||||
|
on_use = function(itemstack, user, pointed_thing)
|
||||||
|
local torso = user:get_inventory():get_stack("armor", 3)
|
||||||
|
if torso and torso:get_name() == "mcl_armor:elytra" and player_rocketing[user] ~= true then
|
||||||
|
player_rocketing[user] = true
|
||||||
|
minetest.after(2.2, function()
|
||||||
|
player_rocketing[user] = false
|
||||||
|
end)
|
||||||
|
itemstack:take_item()
|
||||||
|
--user:add_player_velocity(vector.multiply(user:get_look_dir(), 20))
|
||||||
|
rocket_sound()
|
||||||
|
end
|
||||||
|
return itemstack
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craftitem("mcl_fireworks:rocket_2", {
|
||||||
|
description = description,
|
||||||
|
_tt_help = help.." 2",
|
||||||
|
inventory_image = "mcl_fireworks_rocket.png",
|
||||||
|
stack_max = 64,
|
||||||
|
on_use = function(itemstack, user, pointed_thing)
|
||||||
|
local torso = user:get_inventory():get_stack("armor", 3)
|
||||||
|
if torso and torso:get_name() == "mcl_armor:elytra" and player_rocketing[user] ~= true then
|
||||||
|
player_rocketing[user] = true
|
||||||
|
minetest.after(4.5, function()
|
||||||
|
player_rocketing[user] = false
|
||||||
|
end)
|
||||||
|
itemstack:take_item()
|
||||||
|
--user:add_player_velocity(vector.multiply(user:get_look_dir(), 20))
|
||||||
|
rocket_sound()
|
||||||
|
end
|
||||||
|
return itemstack
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craftitem("mcl_fireworks:rocket_3", {
|
||||||
|
description = description,
|
||||||
|
_tt_help = help.." 3",
|
||||||
|
inventory_image = "mcl_fireworks_rocket.png",
|
||||||
|
stack_max = 64,
|
||||||
|
on_use = function(itemstack, user, pointed_thing)
|
||||||
|
local torso = user:get_inventory():get_stack("armor", 3)
|
||||||
|
if torso and torso:get_name() == "mcl_armor:elytra" and player_rocketing[user] ~= true then
|
||||||
|
player_rocketing[user] = true
|
||||||
|
minetest.after(6, function()
|
||||||
|
player_rocketing[user] = false
|
||||||
|
end)
|
||||||
|
itemstack:take_item()
|
||||||
|
--user:add_player_velocity(vector.multiply(user:get_look_dir(), 20))
|
||||||
|
rocket_sound()
|
||||||
|
end
|
||||||
|
return itemstack
|
||||||
|
end,
|
||||||
|
})
|
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 356 B |
|
@ -1,3 +1,14 @@
|
||||||
|
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 spawn_flames_floor = function(pos)
|
local spawn_flames_floor = function(pos)
|
||||||
-- Flames
|
-- Flames
|
||||||
mcl_particles.add_node_particlespawner(pos, {
|
mcl_particles.add_node_particlespawner(pos, {
|
||||||
|
@ -15,52 +26,39 @@ local spawn_flames_floor = function(pos)
|
||||||
glow = minetest.registered_nodes[minetest.get_node(pos).name].light_source,
|
glow = minetest.registered_nodes[minetest.get_node(pos).name].light_source,
|
||||||
}, "low")
|
}, "low")
|
||||||
-- Smoke
|
-- Smoke
|
||||||
mcl_particles.add_node_particlespawner(pos, {
|
mcl_particles.spawn_smoke(pos, "torch", smoke_pdef)
|
||||||
amount = 0.5,
|
|
||||||
time = 0,
|
|
||||||
minpos = vector.add(pos, { x = -1/16, y = 0.04, z = -1/16 }),
|
|
||||||
maxpos = vector.add(pos, { x = -1/16, y = 0.06, z = -1/16 }),
|
|
||||||
minvel = { x = 0, y = 0.5, z = 0 },
|
|
||||||
maxvel = { x = 0, y = 0.6, z = 0 },
|
|
||||||
minexptime = 2.0,
|
|
||||||
maxexptime = 2.0,
|
|
||||||
minsize = 1.5,
|
|
||||||
maxsize = 1.5,
|
|
||||||
texture = "mcl_particles_smoke_anim.png",
|
|
||||||
animation = {
|
|
||||||
type = "vertical_frames",
|
|
||||||
aspect_w = 8,
|
|
||||||
aspect_h = 8,
|
|
||||||
length = 2.05,
|
|
||||||
},
|
|
||||||
}, "medium")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local spawn_flames_wall = function(pos)
|
local spawn_flames_wall = function(pos)
|
||||||
local minrelpos, maxrelpos
|
local minrelpos, maxrelpos
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
local dir = minetest.wallmounted_to_dir(node.param2)
|
local dir = minetest.wallmounted_to_dir(node.param2)
|
||||||
|
|
||||||
|
local smoke_pdef = table.copy(smoke_pdef)
|
||||||
|
|
||||||
if dir.x < 0 then
|
if dir.x < 0 then
|
||||||
minrelpos = { x = -0.38, y = 0.04, z = -0.1 }
|
smoke_pdef.minrelpos = { x = -0.38, y = 0.04, z = -0.1 }
|
||||||
maxrelpos = { x = -0.2, y = 0.14, z = 0.1 }
|
smoke_pdef.maxrelpos = { x = -0.2, y = 0.14, z = 0.1 }
|
||||||
elseif dir.x > 0 then
|
elseif dir.x > 0 then
|
||||||
minrelpos = { x = 0.2, y = 0.04, z = -0.1 }
|
smoke_pdef.minrelpos = { x = 0.2, y = 0.04, z = -0.1 }
|
||||||
maxrelpos = { x = 0.38, y = 0.14, z = 0.1 }
|
smoke_pdef.maxrelpos = { x = 0.38, y = 0.14, z = 0.1 }
|
||||||
elseif dir.z < 0 then
|
elseif dir.z < 0 then
|
||||||
minrelpos = { x = -0.1, y = 0.04, z = -0.38 }
|
smoke_pdef.minrelpos = { x = -0.1, y = 0.04, z = -0.38 }
|
||||||
maxrelpos = { x = 0.1, y = 0.14, z = -0.2 }
|
smoke_pdef.maxrelpos = { x = 0.1, y = 0.14, z = -0.2 }
|
||||||
elseif dir.z > 0 then
|
elseif dir.z > 0 then
|
||||||
minrelpos = { x = -0.1, y = 0.04, z = 0.2 }
|
smoke_pdef.minrelpos = { x = -0.1, y = 0.04, z = 0.2 }
|
||||||
maxrelpos = { x = 0.1, y = 0.14, z = 0.38 }
|
smoke_pdef.maxrelpos = { x = 0.1, y = 0.14, z = 0.38 }
|
||||||
else
|
else
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- Flames
|
-- Flames
|
||||||
mcl_particles.add_node_particlespawner(pos, {
|
mcl_particles.add_node_particlespawner(pos, {
|
||||||
amount = 8,
|
amount = 8,
|
||||||
time = 0,
|
time = 0,
|
||||||
minpos = vector.add(pos, minrelpos),
|
minpos = vector.add(pos, smoke_pdef.minrelpos),
|
||||||
maxpos = vector.add(pos, maxrelpos),
|
maxpos = vector.add(pos, smoke_pdef.maxrelpos),
|
||||||
minvel = { x = -0.01, y = 0, z = -0.01 },
|
minvel = { x = -0.01, y = 0, z = -0.01 },
|
||||||
maxvel = { x = 0.01, y = 0.1, z = 0.01 },
|
maxvel = { x = 0.01, y = 0.1, z = 0.01 },
|
||||||
minexptime = 0.3,
|
minexptime = 0.3,
|
||||||
|
@ -71,25 +69,7 @@ local spawn_flames_wall = function(pos)
|
||||||
glow = minetest.registered_nodes[node.name].light_source,
|
glow = minetest.registered_nodes[node.name].light_source,
|
||||||
}, "low")
|
}, "low")
|
||||||
-- Smoke
|
-- Smoke
|
||||||
mcl_particles.add_node_particlespawner(pos, {
|
mcl_particles.spawn_smoke(pos, "torch", smoke_pdef)
|
||||||
amount = 0.5,
|
|
||||||
time = 0,
|
|
||||||
minpos = vector.add(pos, minrelpos),
|
|
||||||
maxpos = vector.add(pos, maxrelpos),
|
|
||||||
minvel = { x = 0, y = 0.5, z = 0 },
|
|
||||||
maxvel = { x = 0, y = 0.6, z = 0 },
|
|
||||||
minexptime = 2.0,
|
|
||||||
maxexptime = 2.0,
|
|
||||||
minsize = 1.5,
|
|
||||||
maxsize = 1.5,
|
|
||||||
texture = "mcl_particles_smoke_anim.png",
|
|
||||||
animation = {
|
|
||||||
type = "vertical_frames",
|
|
||||||
aspect_w = 8,
|
|
||||||
aspect_h = 8,
|
|
||||||
length = 2.05,
|
|
||||||
},
|
|
||||||
}, "medium")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local remove_flames = function(pos)
|
local remove_flames = function(pos)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
local S = minetest.get_translator("mcl_playerplus")
|
local S = minetest.get_translator("mcl_playerplus")
|
||||||
|
|
||||||
local elytra = {}
|
elytra = {}
|
||||||
|
|
||||||
local node_stand_return = ":air"
|
local node_stand_return = ":air"
|
||||||
local get_connected_players = minetest.get_connected_players
|
local get_connected_players = minetest.get_connected_players
|
||||||
|
@ -24,6 +24,7 @@ local mcl_playerplus_internal = {}
|
||||||
|
|
||||||
local def = {}
|
local def = {}
|
||||||
local time = 0
|
local time = 0
|
||||||
|
local look_pitch = 0
|
||||||
|
|
||||||
local player_collision = function(player)
|
local player_collision = function(player)
|
||||||
|
|
||||||
|
@ -194,16 +195,33 @@ minetest.register_globalstep(function(dtime)
|
||||||
player_vel_yaws[name] = player_vel_yaw
|
player_vel_yaws[name] = player_vel_yaw
|
||||||
|
|
||||||
if minetest.get_node_or_nil({x=player:get_pos().x, y=player:get_pos().y - 0.5, z=player:get_pos().z}) then
|
if minetest.get_node_or_nil({x=player:get_pos().x, y=player:get_pos().y - 0.5, z=player:get_pos().z}) then
|
||||||
node_stand_return = minetest.get_node_or_nil({x=player:get_pos().x, y=player:get_pos().y - 0.5, z=player:get_pos().z}).name
|
node_stand_return = minetest.get_node_or_nil({x=player:get_pos().x, y=player:get_pos().y - 0.1, z=player:get_pos().z}).name
|
||||||
else
|
else
|
||||||
minetest.log("action", "somehow player got of loaded areas")
|
minetest.log("action", "somehow player got of loaded areas")
|
||||||
end
|
end
|
||||||
|
|
||||||
controls.register_on_press(function(player, key)
|
local chestplate = player:get_inventory():get_stack("armor", 3)
|
||||||
if key~="jump" then return end
|
|
||||||
if player:get_inventory():get_stack("armor", 3):get_name() == "mcl_armor:elytra" and player_velocity.y < -6 and elytra[player] ~= true then
|
if player_rocketing[player] and player_rocketing[player] == true and chestplate:get_name() == "mcl_armor:elytra" then
|
||||||
|
if math.abs(player_velocity.x) + math.abs(player_velocity.y) + math.abs(player_velocity.z) < 40 then
|
||||||
|
player:add_player_velocity(vector.multiply(player:get_look_dir(), 4))
|
||||||
elytra[player] = true
|
elytra[player] = true
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
controls.register_on_press(function(player, key)
|
||||||
|
if key~="jump" and key~="RMB" then return end
|
||||||
|
if key=="jump" then
|
||||||
|
if player:get_inventory():get_stack("armor", 3):get_name() == "mcl_armor:elytra" and player_velocity.y < -6 and elytra[player] ~= true then
|
||||||
|
elytra[player] = true
|
||||||
|
elseif key=="RMB" then
|
||||||
|
if wielded:get_name() == "mcl_tools:rocket" then
|
||||||
|
local item = wielded:take_item()
|
||||||
|
player:set_wielded_item(wielded)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
if elytra[player] == true and node_stand_return ~= "air" or elytra[player] == true and player:get_inventory():get_stack("armor", 3):get_name() ~= "mcl_armor:elytra" or player:get_attach() ~= nil then
|
if elytra[player] == true and node_stand_return ~= "air" or elytra[player] == true and player:get_inventory():get_stack("armor", 3):get_name() ~= "mcl_armor:elytra" or player:get_attach() ~= nil then
|
||||||
|
@ -224,13 +242,12 @@ minetest.register_globalstep(function(dtime)
|
||||||
end
|
end
|
||||||
if math.abs(player_velocity.x) + math.abs(player_velocity.z) < 20 then
|
if math.abs(player_velocity.x) + math.abs(player_velocity.z) < 20 then
|
||||||
local dir = minetest.yaw_to_dir(player:get_look_horizontal())
|
local dir = minetest.yaw_to_dir(player:get_look_horizontal())
|
||||||
local pitch = 1 * player:get_look_vertical() * -.1
|
if degrees(player:get_look_vertical()) * -.01 < .1 then
|
||||||
player:add_velocity({x=dir.x, y=pitch, z=dir.z})
|
look_pitch = degrees(player:get_look_vertical()) * -.01
|
||||||
end
|
else
|
||||||
if control.sneak then
|
look_pitch = .1
|
||||||
if player_velocity.y > -5 then
|
|
||||||
player:add_velocity({x=0, y=-2, z=0})
|
|
||||||
end
|
end
|
||||||
|
player:add_velocity({x=dir.x, y=look_pitch, z=dir.z})
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
playerphysics.remove_physics_factor(player, "gravity", "mcl_playerplus:elytra")
|
playerphysics.remove_physics_factor(player, "gravity", "mcl_playerplus:elytra")
|
||||||
|
|
Loading…
Reference in New Issue