Fixes maps in itemframes not loading after restart (#2255)
Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/2261
Co-authored-by: Elias Fleckenstein <eliasfleckenstein@web.de>
Co-committed-by: Elias Fleckenstein <eliasfleckenstein@web.de>
By adding blackstone to the group "cobble", it automatically inherits
all crafting recipes and tool repair capabilities that apply to that
group.
* Add `cobble=1` to blackstone node definition groups.
* Remove stone tools and furnace crafting recipes.
This enables the feature of unsticky pistons. This allows
for some nodes to be unpullable, but otherwise pushable or diggable.
A certain selection of nodes that can never be moved.
And, stops certain entities from being pushed if they shouldn't move.
Along with this change; I've also updated the rules regarding
pushing, and pulling of nodes & objects to be more accurate to MC.
Now allowing for more complex redstone circuits to be built.
* The nature of a compass was being determined by looking at its meta.
This caused lodestone compasses with unset meta to turn into regular
compasses. Fixed by using string matching on the itemname.
* Changed lodestone rightclick handler to explicitly set the correct
name and frame of the compass used on it instead of waiting for
globalstep to do this.
* Split up `get_compass_image()` into smaller functions. This allows
for better code sharing between old and new API and globalstep fn.
* Add `get_compass_itemname()` function. It will be the new API of
choice, `get_compass_image() will be deprecated soon.
* Remove function declaration out of globalstep function.
* Various other performance improvements.
* Add local aliases for global functions
* Lodestone compasses can only stack 1 item.
* Document functions and variables.
* Fix lodetone compass inaccurately reusing compass descriptions.
* Add usage descriptions to node definitions
* Refactor craftitem registration code.
* Update translation templates.
By adding cobbled deepslate to the group "cobble", it automatically
inherits all crafting recipes and tool repair capabilities that apply
to that group.
* Add `cobble=1` to cobbled deepslate node definition groups. This
requires a little refactoring of the deepslate variants registration
function.
* Remove stone tools, furnace and brewing stand crafting recipes.
* Register "cooking" crafting recipe for deepslate ores that enables
smelting these ores in furnaces.
* Extend deepslate ore registration function to allow passing cooking
result as argument.
* Update the deepslate ore table to include smelting results.
* Put deepslate w/ lapis drops in a separate table, making the deepslate
ores table less unwieldly.
The discussion about how to handle the new ores is still ongoing.
This PR was originally only intended to add the new nodes so
that's what it does now.
* In commit 86b2cd70f9 an extra argument
was added to the `add_large_plant()` function in order to handle silk
touch. For some reason, the callers for "double_grass" and
"double_fern" were updated with two new arguments. Because of this,
silk touch likely never worked on these nodes. This commit removes
the unused `nil` argument from both callers.
* This commit fixes#2155.
If a player wants to make a path when there is no dirt with grass on the
ground it means they need to either have silk touch to collect dirt with
grass or place dirt beside dirt with grass and wait for the grass cover
to spread before they can create the new paths …
Since the former is not possible early in the game and the latter is not
easy, this patch imitates Minecraft 1.17 behaviour; the following nodes
can now be turned into path nodes by right-clicking them with a shovel:
• Dirt (mcl_core:dirt)
• Coarse Dirt (mcl_core:coarse_dirt)
• Dirt with Grass (mcl_core:dirt_with_grass)
• Mycelium (mcl_core:mycelium)
• Podzol (mcl_core:podzol)
A group “path_creation_possible” has been added to mark nodes that can
be turned into a dirt path with a shovel. One obvious objection to that
addition might be that the “dirt” group already exists. Even though all
existing nodes that can be turned into a dirt path do indeed belong to
the “dirt” group, it is not a good idea: Changing what “dirt” means to
“any node that can be turned into a dirt path” would make it harder to
maintain the code.
This texture has the following poem written by me, cora, encoded in its
pixeldata. I the author hereby release both the texture file and the
poem as cc0.
Additionally I explicitly consent with its inclusion into MineClone2,
MineClone5 and Mineclonia as well as any other minetest game for this
day and all the days to come.
Shall though betray me with a texture, mate
I'll smile at though just like a summer's day
The raindrop particles - no laggy state
But spring is coming, really, soon it's may
As If the seasons meant a damn to us
They do not exist in mineclone at all
unreal water flow, iron never rusts
but copper does in summer and in fall
But what this literally is about
because this damn thing is really silly
you see somehow they had to say it loud
I would bring that quote with painting lilys
but plagerism everywhere you see
so this will just be good enough for me
The code for shearing a pumpkin used minetest.swap_node() to replace a
faceless pumpkin with a carved pumpkin. This did not trigger the node
callbacks of the carved pumpkin, which meant that shearing a pumpkin
would not check for the snow golem or iron golem spawn conditions.
This patch replaces minetest.swap_node() in the code for shearing a
pumpkin with minetest.set_node(), which does trigger the callbacks;
therefore snow and iron golems can now spawn as a pumpkin is carved.
While testing the previous commit, it became clear that gourd stems do
not disconnect properly if the gourd disappears while not being dug. A
simple method to create illegal curved stems was to explode the gourd.
This patch changes gourds so that the stem curves back after a gourd is
destroyed, regardless of reason. This hopefully makes curved stems that
are not connected to matching gourds a relict of the past.
Carved pumpkins can end up being connected to a stem – either if they
were grown in a previous version of MineClone2 or Mineclonia, or if a
player carves them before harvesting them. This patch makes sure that
stems turn into unconnected stems after such a carved pumpkin is dug.
Shearing an uncarved pumpkin turns it into a carved pumpkin and drops
four pumpkin seeds. As map generation and growing mechanics have been
changed to generate uncarved pumpkins instead of carved, preserving a
recipe to get pumpkin pie from carved pumpkins enabled players to get
both seeds and pumpkin pie from grown pumpkins, which was unintended.
Shearing an uncarved pumpkin turns it into a carved pumpkin and drops
four pumpkin seeds. As map generation and growing mechanics have been
changed to generate uncarved pumpkins instead of carved, preserving a
recipe to get seeds from carved pumpkins enables players to get twice
the amount of seeds as intended. Because of this, the recipe must go.
Carved pumpkin has to be explicitly registered as a separate node, as
registering a carved pumpkin node happened as a side effect of invoking
mcl_farming:add_gourd() for the carved pumpkin.
The iron / snow golem spawning checks that trigger whenever a carved
pumpkin is placed had to be moved out of the mcl_farming:add_gourd()
invocation to preserve the existing behaviour.
Note that uncarved pumpkin must not be registered as a separate node,
as invoking mcl_farming:add_gourd() for a registered node name leads to
stems not updating when an adjacent node is manually placed or mined.
A user claimed that this texture was a texture from Minecraft 1.8.9 –
see <https://git.minetest.land/MineClone2/MineClone2/issues/2099> for
further details. I have not verified that but I noticed that in commit
152e552458 the file was replaced with a
file containing the exact same pixels.
A visual inspection confirms that the file contains noise, so it is not
clear if it is even copyrightable. However, to ensure that it could not
be identical to a file from Minecraft, To get noise of the same quality,
I have shuffled all its pixels with the following POSIX sh shell script:
LANG=C
PREFIX=mcl_end_crystal_beam
convert $PREFIX.png $PREFIX.pnm
<$PREFIX.pnm >$PREFIX.plainpnm pnmtoplainpnm
<$PREFIX.plainpnm >$PREFIX.seed tr '1234567890 ' ' 1356902468'
(
<$PREFIX.plainpnm head -n+3
<$PREFIX.plainpnm tail -n+4 \
|tr ' ' '\n' \
|shuf --random-source $PREFIX.seed
) >$PREFIX.shuffled.plainpnm
I then opened mcl_end_crystal_beam.shuffled.plainpnm using GIMP,
converted the color black to tranparency and saved the image as a
paletted PNG (which yields a smaller filesize than a grayscale PNG).
* Move descriptive function comments to above the function definition.
* Adopt some luadoc styles.
* Update a stale reference to a renamed function in comments.
* Fix silly and mostly inconsequential logic bug that had gone unnoticed up
till now.
* Condense a single use variable away by using a slightly more elaborate
assignment statement.
* Add a few more local aliases for global minetest.* functions.
* Replace use of local table with compostability values with a call to
`minetest.get_item_group()`.
* Define local alias for `minetest.get_item_group`.
* Remove the now unused static compostabilty values table.
* Change carpet from `group:attached_node` to `group:supported_node`,
allowing carpets to be placed on top of torches, water source blocks
and other non-walkable nodes, like in MC.
* Make carpets walkable. When a carpet is placed on top of a fence or a
wall, the carpet can be jumped upon, allowing to in effect jump over
fences and walls.
The daylight detector code used get_node_light(), which detects both
natural and artificial light. This patch improves the code to use
get_natural_light(), which was introduced with Minetest 5.4.0.
* Check if node has a definition table before attempting to evaluate its
attributes.
* Define local variable to cache multiple accesses to `registered_nodes[]`
and improve readability.
This solves a problem were nether portal removal would trigger deep
recursion through node callbacks. For large portals this could result
in stack overflow crashes on LuaJIT. The issue is solved by rewriting
the portal removal to avoid recursion and removing the portal in one
operation using minetest.bulk_set_node.
The function dynamic_add_media() was changed in incompatible ways in
several minor versions of Minetest, breaking the display of handheld
maps in Minetest 5.5.0. This patch makes handheld maps display there.
The function was blocking with one argument in Minetest 5.3. It was also
blocking in Minetest 5.4, but took an additional argument for a function
to execute once the media had been received. Calling dynamic_add_media()
with a single argument had been deprecated; a function that did nothing
was provided in mcl_maps to satisfy the changed argument requirements.
In Minetest 5.5, dynamic_add_media() was changed to non-blocking. This
introduced a race condition in mcl_maps, where a client often tried to
display a map before it had received the map texture from the server.
Opening an issue on the Minetest issue tracker led to it being closed in
about 20 minutes: <https://github.com/minetest/minetest/issues/11997>
Redstone comparators have two modes, comparison mode & subtraction mode.
Before this patch, the functions to turn comparators on or off attempted
to swap nodes with comparators in the same mode, but failed to determine
the correct replacement node, if the existing node was not a comparator.
When a comparator in an on state (e.g. powered by a filled cauldron) was
flooded, the flooding dropped the comparator and replaced the comparator
node that was to be swapped out with air, which lead to a server crash.
This patch changes the functions that turn comparators on or off so they
only swap existing nodes with comparators in the same mode if the name
of the replacement node can be determined – i.e. if it is not nil.
In commit 55009c257e that added vectors to
mcl_composters, mcl_hoppers was accidentally patched with a unrelated
change, updating it to get_item_group(). This mostly works, but in one
particular case the semantics of the return value differs. Instead of
returning 'nil' it returns '0'. That altered the evaluation of an if
condition, breaking the abm that sucks in items.
This commit fixes the conditional by explicitly comparing '~= 0'.
The function on_place_bucket defined a couple of variables that were
used only once or in a redundant check. After removal of the redundant
check in a previous commit, all use-once variables can now be substituted
with their assignment expressions.
The function on_place_bucket contains the following logic:
if not a and not b then return x end
if a then
foo(a)
elseif b then
foo(b)
else
return x
end
The "if not a and not b then .." is removed because the case is handled
by the else case later on. This will allow some further simplifications.
Instead of directly accessing the group table in node definitions, use
the proper minetest.get_item_group accessor to test for "cauldron"
group.
Also adds local alias get_item_group for the global minetest call.
Two instances of add_node and add_item still used the full minetest
call, substitute the alias.
Added a set_node alias for several minetest.set_node calls.
When using a bucket of water on a cauldron, this would not fill the
cauldron as expected, but deposit a water source block on top of the
cauldron instead.
Applied patch from mineclone5 #38 (commit #
698c29733f06a7fcb7e755bf26ee46b33b00699b) from mineclone5 that fixes
this problem.
Implements a composter block with crafting recipe, and some more
uncraftable blocks representing various stages of filling.
Adds a list of items that can be used with the composter and the chances
of these items adding a layer to the composter.
Implements methods to add compostable items to the composter, to update
the composter to various levels of compost and to harvest an item of
bone meal when the composter is ready.
Textures were taken from XSSheep/Nova_Wostra Pixel Perfection texture
pack.
- enchanted loot generated by mapgen now uses PseudoRandom for randomness
- prevent fishing loot from generating loot 32767 times (!!!) when only 1 is needed
- bows and fishing rods obtained from the treasure section of fishing loot are now enchanted
- there is now a function to uniform enchant items other than books