1
0
mirror of https://github.com/mt-mods/unifieddyes.git synced 2025-06-28 22:36:46 +02:00

Compare commits

...

24 Commits

Author SHA1 Message Date
3764d33490 Merge pull request #16 from fat115/master
add french translation
2017-08-12 16:24:58 -04:00
384ccc3d44 add french translation 2017-08-06 15:11:07 +02:00
08695d01ac some mods still need unifieddyes:white -> dye:white alias 2017-08-01 14:31:04 -04:00
d843b33e7c Merge pull request #14 from afmachado/master
Translation to Brazilian Portuguese
2017-07-20 01:38:40 -04:00
54c3316423 Translation to Brazilian Portuguese
Translation to Brazilian Portuguese
2017-06-27 18:55:52 -03:00
133bc06e3d link API to README 2017-06-20 17:00:46 -04:00
9018efd1b9 rename README 2017-06-20 16:58:33 -04:00
9503386100 update README, point user to forum for detailed usage info 2017-06-20 16:50:24 -04:00
40b836edf4 document the API 2017-06-20 16:44:27 -04:00
495479c6a2 remove a few redundant aliases 2017-06-20 16:11:15 -04:00
0822757382 add alternate recipe for dark orange 2017-06-20 16:04:00 -04:00
ffd03b9c3c clean-up of dark/medium orange and light/red
(fixes #13)
2017-06-20 15:44:28 -04:00
8b20a069d3 rotation fixes for compat with minetest 0.4.16 2017-06-04 16:17:37 -04:00
9dd533f4a0 Merge pull request #9 from AntumDeluge/settings
Replace deprecated 'setting_getbool' with 'settings:get_bool'
2017-05-18 05:44:39 -04:00
83261d5db4 Merge pull request #8 from AntumDeluge/master
Replace deprecated call to 'get_look_yaw' with 'get_look_horizontal'
2017-05-18 05:44:31 -04:00
73e05d9c76 Replace deprecated 'setting_getbool' with 'settings:get_bool' 2017-05-13 16:55:37 -07:00
df3f1b18ab Replace deprecated call to 'get_look_yaw' with 'get_look_horizontal' 2017-05-03 23:05:40 -07:00
df177c26a7 allow shift-punching on a colorable node, to cancel auto-coloring
also add a message in the chat when auto-color is activated, and with what.
2017-03-18 15:56:28 -04:00
cf186f5f9c make sure the pointed thing is a node before checking protection 2017-03-18 14:37:09 -04:00
726bb75e1d add recolor-on-place helper
if you add `after_place_node = unifieddyes.recolor_on_place,`
to your node def, UD will automatically colorize the node when
placed, using the last dye you colored that kind of node with.

If you switch to some other colorable node, or you run out of whatever
color dye you were using at the time, a warning message will be printed
and the autocolor will be reset back to neutral.

If a player signs off, autocolor for him/her is reset to neutral
(this also helps prevent a minor memory leak)

also get rid of one or two debug prints.
2017-03-18 03:26:05 -04:00
8fc5468212 remove outdated comment 2017-03-17 22:26:51 -04:00
63153f1093 protection check on_use 2017-03-17 03:18:06 -04:00
15b6016f0f on_construct for nodes that were 89-color or static,
but now use an LBM to convert to the 256-color palette
2017-03-14 02:05:52 -04:00
978e88bda5 don't crash if the dye target is an unknown node :P 2017-03-11 21:20:10 -05:00
6 changed files with 434 additions and 279 deletions

108
API.md Normal file
View File

@ -0,0 +1,108 @@
### API
This section details the Unified Dyes API and how to use it with your mods.
In your node definition, you must include a few things to interface with Unified Dyes. Here is an example:
```lua
minetest.register_node("mymod:colored_node", {
description = "My custom colored node",
tiles = { "mymod_custom_colored_node.png" },
paramtype = "light",
paramtype2 = "color",
palette = "unifieddyes_palette_extended.png",
place_param2 = 240,
groups = {snappy = 1, cracky = 2, ud_param2_colorable = 1}
on_construct = unifieddyes.on_construct,
after_place_node = unifieddyes.recolor_on_place,
after_dig_node = unifieddyes.after_dig_node,
})
```
`paramtype2` must be one of:
- "color" this is an 89-color or 256-color node
- "colorwallmounted" this is a 32-color node using "wallmounted" mode
- "colorfacedir" this node uses one of the "split" 89-color palettes.
`palette` must be set to match the `paramtype2` setting, and must be one of:
- "unifieddyes_palette.png"
- "unifieddyes_palette_extended.png"
- "unifieddyes_palette_colorwallmounted.png"
- or one of the "split" hues palettes (see below).
`place_param2` generally is only needed for the 256-color palette, and should usually be set to 240 (which corresponds to white).
`groups` If your node can be colored by punching it with dye, its groups entry must contain the key ud_param2_colorable = 1, among whatever else you'd normally put there. If the node is software-controlled, as might be the case for some mesecons-digilines aware node, then this group key should be omitted.
`on_construct` see below.
`after_place_node` see below.
`after_dig_node` see below.
#### Function calls
**`unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)`**
Call this within your node's `after_place_node` callback to allow Unified Dyes to automatically color the node using the dye you last used on that kind of node The feature will remain active until the dye runs out, or the user places a different kind of colorable node, or the user cancels the feature.
**`unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)`
`unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)`**
These two are used to re-orient `wallmounted` nodes after placing. The former allows positioning to floor, ceiling, and four walls, while the latter restricts the rotation to just the four walls. The latter is most often used with a node whose model is designed so that the four wall positions actually place the model "upright", facing +/- X or Z. This is a hacky way to make a node look like it has basic `facedir` capability, while being able to use the 32-color palette.
**`unifieddyes.fix_after_screwdriver_nsew(pos, node, user, mode, new_param2)`**
This serves the same purpose as the `fix_rotation_nsew`, but is used to restrict the node's rotation after it's been hit with the screwdriver.
**`unifieddyes.select_node(pointed_thing)`**
Just what it says on the tin. :-) This function returns a position and node definition of whatever is being pointed at.
**`unifieddyes.is_buildable_to(placer_name, ...)`**
Again, another obvious one, returns whether or not the pointed node is `buildable_to` (can be overwritten by another node).
**`unifieddyes.get_hsv(name)`**
Accepts an item name, and returns the corresponding hue, saturation, and value (in that order), as strings.
If the item name is a color (not greyscale), then hue will be the basic hue for that color, saturation will be empty string for high saturation or `_s50` for low, and value will be `dark_`, `medium_`, `light_`, or an empty string if it's full color.
If the item name is greyscale, then hue will contain `white`, `light_grey`, `grey`, `dark_grey`, or `black`, saturation will (ironically) be an empty string, and value will be `light_`, `dark_`, or empty string if it's medium grey.
For example:
"mymod:mynode_red" would return ("red", "", "")
"mymod:mynode_light_blue" would return ("blue", "", "light_")
"mymod:mynode_dark_yellow_s50" would return ("yellow", "_s50", "dark_")
"mymod:mynode_dark_grey" would return ("dark_grey", "", "dark_")
**`unifieddyes.getpaletteidx(color, palette_type)`**
When given a `color` string (in the form of "dye:foo" or "unifieddyes:foo") and `palette_type` (either a boolean or string), this function returns the numerical index into that palette, and the hue name as a string.
`false` or `nil`: the 89-color palette
`true`: 89 color "split" palette mode, for nodes that need full `facedir` support. In this case, the hue field would match whichever of the 13 "split" palettes the node is using, and the index will be 1-7, representing the shade within that palette. See my coloredwoods mod for more information on how this mode is used.
`wallmounted`: the 32-color palette, for nodes using `colorwallmounted` mode.
`extended`: the 256-color "extended" palette
**`unifieddyes.on_construct(pos)`**
This function, called in your node definition's on_construct, just sets the `palette = "ext"` metadata key for the node after it's been placed. This can then be read in an LBM to determine if this node needs to be converted from the old 89-color palette to the extended 256-color palette. Although it is good practice to call this for any node that uses the 256-color palette, it isn't strictly necessary as long as the node has never used the 89-color palette and won't be subjected to an LBM that changes its color.
**`unifieddyes.after_dig_node(pos, oldnode, oldmetadata, digger)`**
This function handles returning dyes to the user when a node is dug. All colorized nodes need to call this in `after_dig_node`.
**`unifieddyes.on_use(itemstack, player, pointed_thing)`**
This function is used internally by Unfiied Dyes to actually make a dye able to colorize a node when you wield and punch with it. Unified Dyes redefines the minetest_game default dye items to call this function.
#### Tables
In addition to the above API calls, Unified Dyes provides several useful tables
`unifieddyes.HUES` contains a list of the 12 hues used by the 89-color palette.
`unifieddyes.HUES_EXTENDED` contains a list of the 24 hues in the 256-color palette. Each line contains the color name and its RGB value expressed as three numbers (rather than the usual `#RRGGBB` string).
`unifieddyes.base_color_crafts` contains a condensed list of crafting recipes for all 24 basic hues, plus black and white, most of which have multiple alternative recipes. Each line contains the name of the color, up to five dye itemstrings (with `nil` in each unused space), and the yield for that craft.
`unifieddyes.shade_crafts` contains recipes for each of the 10 shades a hue can take on, used with one or two portions of the dye corresponding to that hue. Each line contains the shade name with trailing "_", the saturation name (either `_s50` or empty string), up to three dye itemstrings, and the yield for that craft.
`unifieddyes.greymixes` contains the recipes for the 14 shades of grey. Each line contains the grey shade number from 1-14, up to four dye item names, and the yield for that craft.

248
README
View File

@ -1,248 +0,0 @@
VanessaE's Unified Dyes
=======================
The purpose of this mod originally was to supply a complete set of colors for
Minetest mod authors to use in their recipes. Since the default dyes mod that
is supplied with Minetest "common" is now usable (via flowers, also included in
"common"), this mod has become more of an extension pack.
Unified Dyes expands the standard dye set from 15 to 90 colors.
IMPORTANT: This mod is not intended to suggest that you should use the entire
palette. Rather, I was hoping people would just choose maybe the dozen or so
most useful colors to use in their mods.
Dependencies: default and dye from Minetest "common". This mod will NOT work
without these. This mod will NOT work without these. The default dye mod is
normally activated only in the standard "build" and "minetest_game" games, or perhaps if
someone has a modpack or game that includes them.
Recommends: flowers from common.
License: GPL 2.0 or above
Install: Unzip the distribution file, rename the resultant
VanessaE-unifieddyes-blahblah folder to just "unifieddyes", and move it into
Minetest's mods folder.
The Palette:
[ http://digitalaudioconcepts.com/vanessa/hobbies/minetest/screenshots/color-swatches.png ]
[ The official palette, showing 84 colors and 5 greys. ]
In the image above, the "50%" markings on the left next to each shade mean 50%
saturation for all hues in that shade line. Note that the "light" shades don't
have (or need) that variant. For the greys, the percentages shown are of
brightness relative to pure white. There are three special cases: Light red
has been aliased to default pink dye, and dark green has been aliased to
default dark greey dye. Brown dye also exists in the default set, it's just
not shown in the palette above.
Usage instructions, technical information
=========================================
Getting Started
---------------
First thing's first: you're going to need to harvest some materials to make the
dyes from. For this, you need one or more of the following: roses (red),
tulips (orange), yellow dandelions (yellow), cactus (green), geraniums (blue),
violas (purple), coal (black), or white dandelions (white). Simply wander
around your world and collect whichever of the above you need to get your
colors.
[ http://digitalaudioconcepts.com/vanessa/hobbies/minetest/screenshots/unifieddyes1.png ]
[ The 8 base colors directly obtainable from a material in the world. ]
Simply place one of the above materials into the crafting grid to obtain four
portions of dye in that color From those initial 8 colors, you can directly
fashion another 11, for a total of 19 standard colors (including the various
greys):
[ http://digitalaudioconcepts.com/vanessa/hobbies/minetest/screenshots/unifieddyes2.png ]
[ The complete 19-color standard set. ]
The standardized colors and their crafting methods are as follows:
* Red (0°): one rose
* Orange (30°): one tulip, or put one red dye and one yellow dye into the
crafting grid to mix them (yields 2)
* Yellow (60°): one yellow dandelion
* Lime (90°): mix yellow + green (yields 2)
* Green (120°): one cactus, or mix yellow + blue (yields 2)
* Aqua (150°): mix green + cyan (yields 2)
* Cyan (180°): mix green + blue (yields 2)
* Sky blue (210°): mix cyan + blue (yields 2)
* Blue (240°): one geranium
* Violet (270°): one viola, or mix blue + magenta (yields 2).
* Magenta (300°): mix blue + red (yields 2)
* Red-violet (330°): mix magenta + red (yields 2)
* Black (7.5%): one piece of coal
* Dark grey (25%): mix one white + two black (yields 3)
* Medium grey (50%): mix one white and one black (yields 2)
* Light grey (75%): Mix two white and one black (yields 3)
* White (95%): one white dandelion.
The degree figures are the colors' hues on a standard HSV color wheel, and are
what I used in the textures supplied with this mod. For the greys, the figures
in parenthesis indicate the intended brightness of the shade, relative to
white. Note that black and white don't go all the way to the bottom/top of the
scale, as doing so may crush some details in textures made in those shades (see
below, regarding semi-automatic texture generation).
Darker/Lighter colors
---------------------
To obtain a dark (33%) version of a given color, use two portions of black dye
along with the base color from the list above, which yields three portions of
the final color.
To obtain a medium-brightness (66%) version of a given color, mix one portion
the base color with one portion of black dye (for example, medium lime = lime +
black). All such mixtures yield two portions of the final color.
To obtain a light (150% over full) version of a given color, mix one portion of
the base color with one portion of white dye. Yields 2 portions of the final
color.
Low-saturation colors
---------------------
To get the low saturation (50%) version of one of the base colors, mix one or
more of white, black, or a shade of grey with the desired base color:
Dark, low saturation: dark grey dye + color (yields 2), or two blacks + 1 white
+ color (yields 4). For example, dark, low-saturation red = red + dark grey,
or red + two black + one white.
Medium brightness, low saturation: medium grey dye + color (yields 2), or black
+ white + color (yields 3). For example, medium, low-saturation green = green
+ medium grey, or green + black + white.
Full, low saturation: light grey dye + color (yields 2), or 1 black + 2 whites
+ color (yields 4). For example, bright, low-saturation blue = blue + light
grey, or blue + black + 2 white.
There is no low-saturation version of the "light" colors.
Red + white always returns default pink dye, and black + green always returns
default dark green dye.
RGB values
----------
All RGB values and filenames for all colors and shades of grey are represented
in the file "colors.txt" (which was generated with the bash script
"listcolors.sh"), included in the distribution directory. Note that
listcolors.sh is an example only and was written for a different set of
textures than what Unified Dyes includes now.
Misc. Notes
-----------
If you need to use /give commands, the item names for the standard set of 12
regular "full" colors (plus pink, brown, and dark green) is simply "dye:color",
e.g. "dye:red", "dye:pink", or "dye:skyblue". Greys have a similar naming
convention: dye:white, dye:light_grey, dye:grey, dye:dark_grey, or dye:black.
For everything beyond those initial 19 colors, the item names are of the
following format:
unifieddyes:{"light_" or "medium_" or "dark_"}{color}{nothing or "_s50"}.
For example, low saturation dark yellow is "unifieddyes:dark_yellow_s50", while
light normal-saturation red-violet would be "unifieddyes:light_redviolet".
See the texture filenames in the textures/ folder for further hints - all of
the item names follow the same format as the corresponding filenames, save for
having a colon (:) instead of the first underscore (_).
Semi-automatic generation of textures
=====================================
The texture generator script
----------------------------
Obviously, in order for this mod or the above template to be useful, you'll
need textures. If you plan to support the entire range of colors offered by
Unified Dyes, there is a BASH script included with this mod as well with the
above template named gentextures.sh, which will, with an appropriately- colored
and appropriately-named source texture, and possibly an overlay texture,
generate a complete set of colored and greyscale textures.
The script requires bc (the calculator program) to handle some basic math
regarding the hue adjustments, and Imagemagick's "convert" program handles all
of the actual conversions.
First thing's first though - you need source textures. Using your favorite
image editor, create a single version of your desired texture. Draw it in the
brightest, deepest shade of RED you can muster without losing any detail, and
save it out. Ideally, you will want the average color of the texture, when
taking into account all bright and dark areas, to be as close as possible to
the hex value #FF0000 (0 degrees, 100% saturation, pure red) without losing any
appreciable #detail.
Save this source texture out as a PNG image, with a filename of
"whatever_base.png", where "whatever" is the one-word name of your mod - for
example, mymod_base.png.
If you want to add an image on top of the colored blocks, such as a frame,
which you want to be the same color throughout all of the textures, create it
now. It should consist only of those parts of the textures that you want to
leave unchanged, with some level of alpha transparency everywhere else,
depending on how much of the image needs to remain unchanged. Save it out as a
PNG image, using any filename you want, for example myoverlay.png.
Now, use chmod to make the script executable, if necessary, and run it.
If you don't need the overlay, you just need to supply one command line
argument: the base name of your mod. The script will use that parameter as the
basis of its texture filenames. For example:
./gentextures.sh mymod
The script will then look for mymod_base.png and copy and convert it into
things like mymod_red.png, mymod_dark_blue.png, and so on.
If you want to use an overlay also, skip the above step and run the script with
the base name as the first parameter, and the complete filename of your overlay
as the second instead. For example:
./gentextures.sh mymod myoverlay.png
Otherwise, the program will iterate through all of the hues and shades that are
supported by unifieddyes (though this is done manually, not by reading anything
from the mod), compositing your overlay image in after the recolor step, if
you're using that option.
All of the output files will be placed in a new folder, generated-textures/ in
the current directory. Note that the script looks for the above files in the
current directory also.
The script has a third mode as well:
./gentextures.sh -t mymod myoverlay.png
In this mode, the script will leave the base texture mymod_base.png unchanged,
and instead will rotate the colors of the overlay image and then composite that
onto the base texture. The same color changes will happen with the overlay in
this mode, so it's a good idea to make the overlay some fairly saturated shade
of red. Along with that, the base image should be some neutral color; any
color is fine as long as the result is what you wanted.
The program attempts to verify that the files you've asked it to use will
actually work, and will exit immediately if the any are invalid, missing, etc.
Use your favorite image browser or file manager to review the results in
generated-textures/, and if they're right, copy them over to the textures/
folder in your mod.
Note that this script does not generate brown and pink variations of your base
texture - you'll have to do those two manually.

16
README.md Normal file
View File

@ -0,0 +1,16 @@
VanessaE's Unified Dyes
=======================
The purpose of this mod originally was to supply a complete set of colors for Minetest mod authors to use for colorized nodes, or to reference in recipes. Since the advent of the default dyes mod in minetest_game, this mod has become more of an extension of the default mod. Since the advent of param2 colorization, it has also become a library for general color handling.
Unified Dyes expands the standard dye set from 15 colors to 32, 89, or 256 (see the API and usage info).
Dependencies: Minetest engine version 0.4.16 or higher and a corresponding copy of minetest_game.
License: GPL 2.0 or higher.
Install: Unzip the distribution file, rename the resultant folder to just "unifieddyes", move it into Minetest's mods folder, and enable it in your world configuration.
Usage: for detailed usage information, please see [the Unified Dyes Thread](https://forum.minetest.net/viewtopic.php?f=11&t=2178&p=28399) on the Minetest forum.
API: the full API is documented here: https://github.com/minetest-mods/unifieddyes/blob/master/API.md

157
init.lua
View File

@ -30,8 +30,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
--=====================================================================
unifieddyes = {}
unifieddyes.last_used_dye = {}
unifieddyes.last_dyed_node = {}
local creative_mode = minetest.setting_getbool("creative_mode")
local creative_mode = minetest.settings:get_bool("creative_mode")
-- Boilerplate to support localized strings if intllib mod is installed.
local S
@ -134,22 +136,79 @@ local default_dyes = {
"yellow"
}
-- this tiles the "extended" palette sideways and then crops it to 256x1
-- to convert it from human readable to something the engine can use as a palette.
--
-- in machine-readable form, the selected color is:
-- [hue] - [shade]*24 for the light colors, or
-- [hue] + [saturation]*24 + [shade]*48 for the dark colors, or
-- 240 + [shade] for the greys, 0 = white.
-- automatically recolor a placed node to match the last-used dye
-- should be called in the node's `after_place_node` callback.
function unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)
local playername = placer:get_player_name()
local stackname = itemstack:get_name()
if unifieddyes.last_dyed_node[playername] ~= stackname then
if unifieddyes.last_used_dye[playername] then
minetest.chat_send_player(playername, "Switched to \""..stackname.."\" while auto-coloring, color reset to neutral.")
end
unifieddyes.last_used_dye[playername] = nil
unifieddyes.last_dyed_node[playername] = nil
end
unifieddyes.last_dyed_node[playername] = stackname
if unifieddyes.last_used_dye[playername] then
local lastdye = unifieddyes.last_used_dye[playername]
local inv = placer:get_inventory()
if (lastdye and lastdye ~= "" and inv:contains_item("main", lastdye.." 1")) or creative_mode then
local nodedef = minetest.registered_nodes[stackname]
local newname = nodedef.ud_replacement_node or stackname
local node = minetest.get_node(pos)
local palette_type = true -- default to 89-color split, because the others are easier to check for.
local oldfdir = node.param2 % 32
if nodedef.palette == "unifieddyes_palette.png" then
palette_type = false
oldfdir = 0
elseif nodedef.palette == "unifieddyes_palette_colorwallmounted.png" then
palette_type = "wallmounted"
oldfdir = node.param2 % 8
elseif nodedef.palette == "unifieddyes_palette_extended.png" then
palette_type = "extended"
oldfdir = 0
end
local paletteidx, hue = unifieddyes.getpaletteidx(lastdye, palette_type)
if palette_type == true then newname = string.gsub(newname, "_grey", "_"..unifieddyes.HUES[hue]) end
minetest.set_node(pos, { name = newname, param2 = oldfdir + paletteidx })
local meta = minetest.get_meta(pos)
meta:set_string("dye", lastdye)
if not creative_mode then
inv:remove_item("main", lastdye.." 1")
end
else
minetest.chat_send_player(playername, "Ran out of "..unifieddyes.last_used_dye[playername]..", resetting to neutral.")
unifieddyes.last_used_dye[playername] = nil
end
end
end
minetest.register_on_leaveplayer(function(player)
local playername = player:get_player_name()
unifieddyes.last_used_dye[playername] = nil
unifieddyes.last_dyed_node[playername] = nil
end)
-- code borrowed from homedecor
-- call this function to reset the rotation of a "wallmounted" object on place
function unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
local node = minetest.get_node(pos)
local yaw = placer:get_look_yaw()
local dir = minetest.yaw_to_dir(yaw-1.5)
local yaw = placer:get_look_horizontal()
local dir = minetest.yaw_to_dir(yaw) -- -1.5)
local pitch = placer:get_look_vertical()
local fdir = minetest.dir_to_wallmounted(dir)
@ -167,8 +226,8 @@ end
function unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
local node = minetest.get_node(pos)
local yaw = placer:get_look_yaw()
local dir = minetest.yaw_to_dir(yaw)
local yaw = placer:get_look_horizontal()
local dir = minetest.yaw_to_dir(yaw+1.5)
local fdir = minetest.dir_to_wallmounted(dir)
minetest.swap_node(pos, { name = node.name, param2 = fdir })
end
@ -256,7 +315,7 @@ function unifieddyes.getpaletteidx(color, palette_type)
local origcolor = color
local aliases = {
["pink"] = "light_red",
["brown"] = "dark_orange",
["brown"] = "medium_orange",
}
local grayscale = {
@ -440,7 +499,7 @@ function unifieddyes.getpaletteidx(color, palette_type)
else
if color == "brown" then
color = "orange"
shade = "dark"
shade = "medium"
elseif color == "pink" then
color = "red"
shade = "light"
@ -473,6 +532,16 @@ function unifieddyes.getpaletteidx(color, palette_type)
end
end
-- if your node was once 89-color and uses an LBM to convert to the 256-color palette,
-- call this in that node def's on_construct:
function unifieddyes.on_construct(pos)
local meta = minetest.get_meta(pos)
meta:set_string("palette", "ext")
end
-- call this in your node's after_dig_node to get the last-used dye back.
function unifieddyes.after_dig_node(pos, oldnode, oldmetadata, digger)
local prevdye
@ -492,18 +561,30 @@ function unifieddyes.after_dig_node(pos, oldnode, oldmetadata, digger)
end
function unifieddyes.on_use(itemstack, player, pointed_thing)
local stackname = itemstack:get_name()
local playername = player:get_player_name()
if pointed_thing and pointed_thing.type == "node" then
if minetest.is_protected(unifieddyes.select_node(pointed_thing), playername)
and not minetest.check_player_privs(playername, "protection_bypass") then
minetest.chat_send_player(playername, "Sorry, someone else owns that spot.")
return
end
end
if pointed_thing and pointed_thing.type == "object" then
pointed_thing.ref:punch(player, 0, itemstack:get_tool_capabilities())
return player:get_wielded_item() -- punch may modified the wielded item, load the new and return it
end
if not (pointed_thing and pointed_thing.type == "node") then return end -- if "using" the dye not on a node
if not (pointed_thing and pointed_thing.type == "node") then return end -- if "using" the dye on nothing at all (e.g. air)
local pos = minetest.get_pointed_thing_position(pointed_thing)
local node = minetest.get_node(pos)
local nodedef = minetest.registered_nodes[node.name]
local playername = player:get_player_name()
if not nodedef then return end -- target was an unknown node, just bail out
-- if the node has an on_punch defined, bail out and call that instead, unless "sneak" is pressed.
if not player:get_player_control().sneak then
@ -513,6 +594,14 @@ function unifieddyes.on_use(itemstack, player, pointed_thing)
end
end
if player:get_player_control().sneak then
if unifieddyes.last_used_dye[playername] then
minetest.chat_send_player(playername, "Shift-punched a node, switching back to neutral color." )
end
unifieddyes.last_used_dye[playername] = nil
return
end
-- if the target is unknown, has no groups defined, or isn't UD-colorable, just bail out
if not (nodedef and nodedef.groups and nodedef.groups.ud_param2_colorable) then
minetest.chat_send_player(playername, "That node can't be colored.")
@ -532,19 +621,21 @@ function unifieddyes.on_use(itemstack, player, pointed_thing)
palette_type = "wallmounted"
end
print(palette_type)
if minetest.is_protected(pos, playername) and not minetest.check_player_privs(playername, {protection_bypass=true}) then
minetest.record_protection_violation(pos, playername)
return
end
local stackname = itemstack:get_name()
local pos2 = unifieddyes.select_node(pointed_thing)
local paletteidx, hue = unifieddyes.getpaletteidx(stackname, palette_type)
if paletteidx then
if unifieddyes.last_used_dye[playername] ~= stackname then
minetest.chat_send_player(playername, "Color "..stackname.." selected, auto-coloring activated." )
unifieddyes.last_used_dye[playername] = stackname
end
local meta = minetest.get_meta(pos)
local prevdye = meta:get_string("dye")
local inv = player:get_inventory()
@ -713,6 +804,8 @@ for _, h in ipairs(unifieddyes.HUES_EXTENDED) do
on_use = unifieddyes.on_use
})
else
if (val..hue) ~= "medium_orange"
and (val..hue) ~= "light_red" then
minetest.register_craftitem(":dye:"..val..hue, {
description = S(desc),
inventory_image = "unifieddyes_dye.png^[colorize:#"..color..":200",
@ -720,6 +813,7 @@ for _, h in ipairs(unifieddyes.HUES_EXTENDED) do
on_use = unifieddyes.on_use
})
end
end
minetest.register_alias("unifieddyes:"..val..hue, "dye:"..val..hue)
if v > 3 then -- also register the low-sat version
@ -869,6 +963,8 @@ for _,i in ipairs(unifieddyes.base_color_crafts) do
local firstdye = j[3]
if firstdye == "color" then firstdye = "dye:"..color end
-- ignore black, white, anything containing the word "grey"
if color ~= "black" and color ~= "white" and not string.find(color, "grey") then
minetest.register_craft( {
@ -885,6 +981,8 @@ for _,i in ipairs(unifieddyes.base_color_crafts) do
end
end
-- greys
unifieddyes.greymixes = {
{ 1, "dye:black", "dye:black", "dye:black", "dye:dark_grey", 4 },
{ 2, "dye:black", "dye:black", "dye:dark_grey", nil, 3 },
@ -930,13 +1028,22 @@ for _, i in ipairs(unifieddyes.greymixes) do
})
end
minetest.register_alias("unifieddyes:light_red", "dye:pink")
minetest.register_alias("unifieddyes:dark_green", "dye:dark_green")
-- we can't make dark orange anymore because brown/medium orange conflicts
minetest.register_craft( {
type = "shapeless",
output = "dye:dark_orange",
recipe = {
"dye:brown",
"dye:brown"
},
})
minetest.register_alias("dye:light_red", "dye:pink")
minetest.register_alias("dye:medium_orange", "dye:brown")
minetest.register_alias("unifieddyes:black", "dye:black")
minetest.register_alias("unifieddyes:darkgrey", "dye:dark_grey")
minetest.register_alias("unifieddyes:dark_grey", "dye:dark_grey")
minetest.register_alias("unifieddyes:grey", "dye:grey")
minetest.register_alias("unifieddyes:lightgrey", "dye:light_grey")
minetest.register_alias("unifieddyes:light_grey", "dye:light_grey")
minetest.register_alias("unifieddyes:white", "dye:white")

87
locale/fr.txt Normal file
View File

@ -0,0 +1,87 @@
# Template
Lime Dye = Teinture citron-vert
Aqua Dye = Teinture aqua
Sky-blue Dye = Teinture bleu ciel
Red-violet Dye = Teinture rouge-violet
Light Grey Dye = Teinture gris clair
Dark Red Dye (low saturation) = Teinture rouge foncé (basse saturation)
Dark Orange Dye (low saturation) = Teinture orange foncé (basse saturation)
Dark Yellow Dye (low saturation) = Teinture jaune foncé (basse saturation)
Dark Lime Dye (low saturation) = Teinture citron-vert foncé (basse saturation)
Dark Green Dye (low saturation) = Teinture vert foncé (basse saturation)
Dark Aqua Dye (low saturation) = Teinture aqua foncé (basse saturation)
Dark Cyan Dye (low saturation) = Teinture cyan foncé (basse saturation)
Dark Sky-blue Dye (low saturation) = Teinture bleu ciel foncé (basse saturation)
Dark Blue Dye (low saturation) = Teinture bleu foncé (basse saturation)
Dark Violet Dye (low saturation) = Teinture violet foncé (basse saturation)
Dark Magenta Dye (low saturation) = Teinture magenta foncé (basse saturation)
Dark Red-violet Dye (low saturation) = Teinture rouge-violet foncé (basse saturation)
Dark Red Dye = Teinture rouge foncé
Dark Orange Dye = Teinture orange foncé
Dark Yellow Dye = Teinture jaune foncé
Dark Lime Dye = Teinture citron-vert foncé
Dark Green Dye = Teinture vert foncé
Dark Aqua Dye = Teinture aqua foncé
Dark Cyan Dye = Teinture cyan foncé
Dark Sky-blue Dye = Teinture bleu ciel foncé
Dark Blue Dye = Teinture bleu foncé
Dark Violet Dye = Teinture violet foncé
Dark Magenta Dye = Teinture magenta foncé
Dark Red-violet Dye = Teinture rouge-violet foncé
Medium Red Dye (low saturation) = Teinture rouge moyen (basse saturation)
Medium Orange Dye (low saturation) = Teinture orange moyen (basse saturation)
Medium Yellow Dye (low saturation) = Teinture jaune moyen (basse saturation)
Medium Lime Dye (low saturation) = Teinture citron-vert moyen (basse saturation)
Medium Green Dye (low saturation) = Teinture vert moyen (basse saturation)
Medium Aqua Dye (low saturation) = Teinture aqua moyen (basse saturation)
Medium Cyan Dye (low saturation) = Teinture cyan moyen (basse saturation)
Medium Sky-blue Dye (low saturation) = Teinture bleu ciel moyen (basse saturation)
Medium Blue Dye (low saturation) = Teinture bleu moyen (basse saturation)
Medium Violet Dye (low saturation) = Teinture violet moyen (basse saturation)
Medium Magenta Dye (low saturation) = Teinture magenta moyen (basse saturation)
Medium Red-violet Dye (low saturation) = Teinture rouge-violet moyen (basse saturation)
Medium Red Dye = Teinture rouge moyen
Medium Orange Dye = Teinture orange moyen
Medium Yellow Dye = Teinture jaune moyen
Medium Lime Dye = Teinture citron-vert moyen
Medium Green Dye = Teinture vert moyen
Medium Aqua Dye = Teinture aqua moyen
Medium Cyan Dye = Teinture cyan moyen
Medium Sky-blue = Teinture bleu ciel moyen
Medium Blue Dye = Teinture bleu moyen
Medium Violet Dye = Teinture violet moyen
Medium Magenta Dye = Teinture magenta moyen
Medium Red-violet Dye = Teinture rouge-violet moyen
Red Dye (low saturation) = Teinture rouge (basse saturation)
Orange Dye (low saturation) = Teinture orange (basse saturation)
Yellow Dye (low saturation) = Teinture jaune (basse saturation)
Lime Dye (low saturation) = Teinture citron-vert (basse saturation)
Green Dye (low saturation) = Teinture vert (basse saturation)
Aqua Dye (low saturation) = Teinture aqua (basse saturation)
Cyan Dye (low saturation) = Teinture cyan (basse saturation)
Sky-blue Dye (low saturation) = Teinture bleu ciel (basse saturation)
Blue Dye (low saturation) = Teinture bleu (basse saturation)
Violet Dye (low saturation) = Teinture violet (basse saturation)
Magenta Dye (low saturation) = Teinture magenta (basse saturation)
Red-violet Dye (low saturation) = Teinture rouge-violet (basse saturation)
Red Dye = Teinture rouge
Orange Dye = Teinture orange
Yellow Dye = Teinture jaune
Lime Dye = Teinture citron-vert
Green Dye = Teinture vert
Aqua Dye = Teinture aqua
Cyan Dye = Teinture cyan
Sky-blue Dye = Teinture bleu ciel
Blue Dye = Teinture bleu
Violet Dye = Teinture violet
Magenta Dye = Teinture magenta
Red-violet Dye = Teinture rouge-violet
[UnifiedDyes] Loaded! = [UnifiedDyes] chargé !

85
locale/pt.txt Normal file
View File

@ -0,0 +1,85 @@
Lime Dye = Corante Lima
Aqua Dye = Corante Água
Sky-blue Dye = Corante Azul-Céu
Red-violet Dye = Corante Vermelho-Violeta
Light Grey Dye = Corante Cinza Claro
Dark Red Dye (low saturation) = Corante Vermelho Escuro (baixa saturação)
Dark Orange Dye (low saturation) = Corante Laranja Escuro (baixa saturação)
Dark Yellow Dye (low saturation) = Corante Amarelo Escuro (baixa saturação)
Dark Lime Dye (low saturation) = Corante Lima Escuro (baixa saturação)
Dark Green Dye (low saturation) = Corante Verde Escuro (baixa saturação)
Dark Aqua Dye (low saturation) = Corante Água Escuro (baixa saturação)
Dark Cyan Dye (low saturation) = Corante Ciano Escuro (baixa saturação)
Dark Sky-blue Dye (low saturation) = Corante Azul-Céu Escuro (baixa saturação)
Dark Blue Dye (low saturation) = Corante Azul Escuro (baixa saturação)
Dark Violet Dye (low saturation) = Corante Violeta Escuro (baixa saturação)
Dark Magenta Dye (low saturation) = Corante Magenta Escuro (baixa saturação)
Dark Red-violet Dye (low saturation) = Corante Vermelho-Violeta Escuro (baixa saturação)
Dark Red Dye = Corante Vermelho Escuro
Dark Orange Dye = Corante Laranja Escuro
Dark Yellow Dye = Corante Amarelo Escuro
Dark Lime Dye = Corante Lima Escuro
Dark Green Dye = Corante Verde Escuro
Dark Aqua Dye = Corante Água Escuro
Dark Cyan Dye = Corante Ciano Escuro
Dark Sky-blue Dye = Corante Azul-Céu Escuro
Dark Blue Dye = Corante Azul Escuro
Dark Violet Dye = Corante Violeta Escuro
Dark Magenta Dye = Corante Magenta Escuro
Dark Red-violet Dye = Corante Vermelho-Violeta Escuro
Medium Red Dye (low saturation) = Corante Vermelho Médio (baixa saturação)
Medium Orange Dye (low saturation) = Corante Laranja Médio (baixa saturação)
Medium Yellow Dye (low saturation) = Corante Amarelo Médio (baixa saturação)
Medium Lime Dye (low saturation) = Corante Lima Médio (baixa saturação)
Medium Green Dye (low saturation) = Corante Verde Médio (baixa saturação)
Medium Aqua Dye (low saturation) = Corante Água Médio (baixa saturação)
Medium Cyan Dye (low saturation) = Corante Ciano Médio (baixa saturação)
Medium Sky-blue Dye (low saturation) = Corante Azul-Céu Médio (baixa saturação)
Medium Blue Dye (low saturation) = Corante Azul Médio (baixa saturação)
Medium Violet Dye (low saturation) = Corante Violeta Médio (baixa saturação)
Medium Magenta Dye (low saturation) = Corante Magenta Médio (baixa saturação)
Medium Red-violet Dye (low saturation) = Corante Vermelho-Violeta Médio (baixa saturação)
Medium Red Dye = Corante Vermelho Médio
Medium Orange Dye = Corante Laranja Médio
Medium Yellow Dye = Corante Amarelo Médio
Medium Lime Dye = Corante Lima Médio
Medium Green Dye = Corante Verde Médio
Medium Aqua Dye = Corante Água Médio
Medium Cyan Dye = Corante Ciano Médio
Medium Sky-blue = Corante Azul-Céu Médio
Medium Blue Dye = Corante Azul Médio
Medium Violet Dye = Corante Violeta Médio
Medium Magenta Dye = Corante Magenta Médio
Medium Red-violet Dye = Corante Vermelho-Violeta Médio
Red Dye (low saturation) = Corante Vermelho (baixa saturação)
Orange Dye (low saturation) = Corante Laranja (baixa saturação)
Yellow Dye (low saturation) = Corante Amarelo (baixa saturação)
Lime Dye (low saturation) = Corante Lima (baixa saturação)
Green Dye (low saturation) = Corante Vermelho (baixa saturação)
Aqua Dye (low saturation) = Corante Água (baixa saturação)
Cyan Dye (low saturation) = Corante Ciano (baixa saturação)
Sky-blue Dye (low saturation) = Corante Azul-Céu (baixa saturação)
Blue Dye (low saturation) = Corante Azul (baixa saturação)
Violet Dye (low saturation) = Corante Violeta (baixa saturação)
Magenta Dye (low saturation) = Corante Magenta (baixa saturação)
Red-violet Dye (low saturation) = Corante Vermelho-Violeta (baixa saturação)
Red Dye = Corante Vermelho
Orange Dye = Corante Laranja
Yellow Dye = Corante Amarelo
Lime Dye = Corante Lima
Green Dye = Corante Verde
Aqua Dye = Corante Água
Cyan Dye = Corano Ciano
Sky-blue Dye = Corante Azul-Céu
Blue Dye = Corante Azul
Violet Dye = Corante Violeta
Magenta Dye = Corante Magenta
Red-violet Dye = Corante Vermelho-Violeta
[UnifiedDyes] Loaded! = [UnifiedDyes] Carregado!