REDO ALL THE THINGS

This commit is contained in:
GreenXenith 2021-04-11 17:51:01 -07:00
parent 32ab824c79
commit 55e1365835
151 changed files with 2886 additions and 284 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*.blend1
.vscode/

43
.luacheckrc Normal file
View File

@ -0,0 +1,43 @@
max_line_length = false
read_globals = {
"DIR_DELIM",
"minetest", "core",
"dump", "dump2",
"vector",
"VoxelManip", "VoxelArea",
"PseudoRandom", "PcgRandom",
"ItemStack",
"Settings",
"unpack",
table = {
fields = {
"copy",
"indexof",
"insert_all",
"key_value_swap",
}
},
string = {
fields = {
"split",
"trim",
}
},
math = {
fields = {
"hypot",
"sign",
"factorial"
}
},
"default", "stairs", "bucket"
}
globals = {
"greek"
}

View File

@ -1,4 +1,4 @@
MIT Copyright 2020 GreenXenith
MIT Copyright 2021 GreenXenith
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in

455
README.md
View File

@ -1,7 +1,452 @@
# Greeknodes
It's all Greek to me.
# Greek
_It's all Greek to me._
Some Greek-themed architecture nodes.
This mod is completely dependency-agnostic, meaning no extra mods are required to have any content. Some mods are optionally required to provide certain crafting recipes (see [Dependencies](#dependencies)). All non-`greek` recipe items are configurable (see [Configuration](#configuration)).
License of `greeknodes_tar_base.png`, `greeknodes_tar_block.png`, `greeknodes_marble.png`:
CC-by-SA 4.0 VanessaE ([building_blocks](https://gitlab.com/VanessaE/homedecor_modpack/-/tree/master/building_blocks))
![screenshot.png](screenshot.png)
## Contents
* Polished marble
* Carved marble tiles
* Painted marble tiles
* Marble pillars
* Marble detailing (acroterions, triglyphs, metopes)
* Gilded gold
* Vases
* Lamps and fire bowls
* Blue doors and shutters
* Stairs for most listed nodes
See [the complete item list](#full-lists) for more details.
## Dependencies
All listed dependencies are only defaults and are configurable unless noted otherwise.
* `stairs`: May provide more up-to-date stair placement functionality. Not required for stairs.
* `dye`: Used in numerous color recipes, mainly render and painted tiles (non-configurable).
* `darkage`: Provides marble and chalk (used in polished marble and cement, respectively).
* `building_blocks`: Provides marble for polished marble.
* `technic_worldgen`: Provides marble for polished marble.
* `default`: Provides silver sandstone (for cement), gold block (for gilded gold), clay (for red clay), and steel ingot (for locked doors). Also provides various `group:wood`s.
* `basic_materials`: Provides padlock for locked doors.
## Configuration
All craftitems are configurable via the `minetest.conf` using settings listed in [settingtypes.txt](settingtypes.txt). Craftitem settings use a comma-deliminated list of itemstrings. Each item listed, if available, will be used as a valid item in crafting recipes using that item type.
Configurable item types:
* Marble: Used to craft polished marble. Polished marble is in turn used to craft all other marble-related items.
NOTE: If [greeknodes compaitibility](#compatibility) is enabled, at least one registered item must be in this list.
* Limestone: Used to craft cement for render.
* Gold block: Used to craft gilded gold.
* Clay: Used to craft red clay.
* Blue wood: Used to craft doors and shutters.
* Lock: Used to craft locked doors.
Other settings:
* Maximum vase capacity
* Snuff fire bowls on dig
* Enable `greeknodes` aliases
* Alias `greeknodes` marble to polished marble
See [settingtypes.txt](settingtypes.txt) for defaults.
## Compatibility
This mod is the successor to my old `greeknodes` mod. Aliases are registered by default to convert old `greeknodes` items to `greek` items. For this to be successful, at least one valid marble item must be configured, or aliasing to polished marble must be enabled. Compatibility can be [disabled](#configuration) entirely, of course.
## Implementations
### Coloring
Some nodes (render, painted tiles) have 8 available colors variants. They can be obtained by combining them with a dye (dye is not consumed) or punching a colorable node with a dye.
### Stairs
I need to be able to use dye punch-coloring on certain stairs (painted tile, render). Default stairs has two issues:
* Takes explicit definition values instead of a whole definition
* Doesn't return what items were actually registered
As such, I've rolled my own implementation near-identical to that of default stairs, but a bit more succinct and generic. I've used the rotation functions from default stairs, and it will poll for a more up-to-date function if default stairs is enabled.
### Doors
Depending on external mods for content would not be very dependency-agnostic, so I've opted to roll my own doors as simply as I could manage. My implementation is smaller and in some ways more naive than default doors, but it works as well as I'd like.
Doors are implemented using only 2 (a, b) nodes per type rather than 8 (a, b, c, d, for unlocked and locked). An open A door is identical to a closed B door, and vise-versa, provided the front and back of the door texture is identical. Locked doors are implemented using param2 palette index (locked doors have a silver handle). They can only be obtained via crafting.
Doors also support skeleton keys. As an extended key feature, you can bind already-bound keys to unbound doors.
### Craftrings
Some nodes have many near-identical variants (such as metopes). Rather than making a unique crafting recipe for each node, a "craftring" is registered to loop through all possible variants. Placing one version of the item in the crafting grid will output the next version. The last variant will return the first variant (to form the loop).
As crafting large amounts of certain variants can be tedious, variants can be copied. Placing 2 of a target variant in the crafting grid with another variant will output the target variant and keep the other 2 target variants.
```
+-+-+-+ +-+-+-+ +-+
|A|A|B| -> |A|A| | |A|
+-+-+-+ +-+-+-+ +-+
```
## Todo
* Configurable sounds
* Translation support
* ???
## Full Lists
<details><summary>Items</summary>
`*`: Has stairs
`+`: Has colors
`#`: Not craftable (but may be placable)
`!`: Not obainable at all
* `greek:acroterion`
* `greek:acroterion_corner`
* `greek:blue_wood`*
* `greek:cement`*+
* `greek:chain`
* `greek:door_<1-4>_<a,b>`
* `greek:door_blank`!
* `greek:fire_bowl`
* `greek:fire_bowl_hanging`#
* `greek:fire_bowl_hanging_lit`#
* `greek:fire_bowl_lit`#
* `greek:gilded_gold`*
* `greek:lamp`
* `greek:marble_cobble`*
* `greek:marble_painted_center_<1-12>`*+
* `greek:marble_painted_corner_<1-12>`*+
* `greek:marble_painted_edge_<1-12>`*+
* `greek:marble_pillar`*
* `greek:marble_pillar_base_corinthian`
* `greek:marble_pillar_base_doric`
* `greek:marble_pillar_base_ionic`
* `greek:marble_pillar_head_corinthian`
* `greek:marble_pillar_head_doric`
* `greek:marble_pillar_head_ionic`
* `greek:marble_polished`*
* `greek:marble_polished_block`*
* `greek:marble_tile_<1-6>`*
* `greek:metope_centaur_and_man`
* `greek:metope_chariot`
* `greek:metope_crowd`
* `greek:metope_gaurd`
* `greek:metope_horse`
* `greek:metope_horses`
* `greek:metope_man_kneeling`
* `greek:metope_man_laying`
* `greek:metope_man_standing`
* `greek:metope_rider`
* `greek:metope_three_men`
* `greek:metope_two_men`
* `greek:red_clay`
* `greek:red_clay_fired`*
* `greek:render`*+
* `greek:shutters_<1-3>[_closed]`
* `greek:triglyph`
* `greek:triglyph_blue`
* `greek:vase_amphora_<1-4>`
* `greek:vase_stamnos_<1-4>`
</details>
<details><summary>Recipes</summary>
`greek:acroterion 2`:
```
M = greek:marble_polished
+-+-+-+
| |M| |
+-+-+-+
| |M| |
+-+-+-+
|M|M|M|
+-+-+-+
or
Shapeless (1) = greek:acroterion_corner
```
`greek:acroterion_corner 2`:
```
M = greek:marble_polished
+-+-+-+
|M| | |
+-+-+-+
|M| | |
+-+-+-+
|M|M|M|
+-+-+-+
(Reversable)
or
Shapeless (1) = greek:acroterion
```
`greek:blue_wood`:
```
Shapeless: dye:blue, group:wood
```
`greek:cement`:
```
Cooking: group:greek:limestone
```
`greek:chain 12`:
```
G = greek:gilded_gold
+-+
|G|
+-+
|G|
+-+
|G|
+-+
```
`greek:door_1_a 2`:
```
W = group:greek:blue_wood
+-+-+
|W|W|
+-+-+
|W|W|
+-+-+
|W|W|
+-+-+
```
`greek:fire_bowl 2`:
```
M = greek:marble_polished
G = greek:gilded_gold
+-+-+-+
|M| |M|
+-+-+-+
| |G| |
+-+-+-+
```
`greek:gilded_gold`:
```
Cooking: group:greek:gold_block
```
`greek:lamp 2`:
```
C = group:greek:red_clay
+-+-+-+
|C| |C|
+-+-+-+
| |C| |
+-+-+-+
```
`greek:marble_cobble 5`:
```
M = greek:marble_polished
+-+-+-+
|M| |M|
+-+-+-+
| |M| |
+-+-+-+
|M| |M|
+-+-+-+
```
`greek:marble_painted_center_1 4`:
```
M = greek:marble_polished
D = dye:blue
+-+-+-+
|M|D|M|
+-+-+-+
|D|D|D|
+-+-+-+
|M|D|M|
+-+-+-+
```
`greek:marble_painted_corner_1 4`:
```
M = greek:marble_polished
D = dye:blue
+-+-+-+
|D|M|M|
+-+-+-+
|D|M|M|
+-+-+-+
|D|D|D|
+-+-+-+
(Rotatable)
```
`greek:marble_painted_edge_1 4`:
```
M = greek:marble_polished
D = dye:blue
+-+-+-+
|D|M|D|
+-+-+-+
|M|D|M|
+-+-+-+
|D|M|D|
+-+-+-+
```
`greek:marble_pillar 2`:
```
M = greek:marble_polished
+-+
|M|
+-+
|M|
+-+
```
`greek:marble_pillar_base_doric 4`:
```
M = greek:marble_polished
P = greek:marble_pillar
+-+-+-+
| |P| |
+-+-+-+
|P|M|P|
+-+-+-+
```
`greek:marble_pillar_head_doric 4`:
```
M = greek:marble_polished
P = greek:marble_pillar
+-+-+-+
|P|M|P|
+-+-+-+
| |P| |
+-+-+-+
```
`greek:marble_polished 9`:
```
M = group:greek:marble
+-+-+-+
|M|M|M|
+-+-+-+
|M|M|M|
+-+-+-+
|M|M|M|
+-+-+-+
```
`greek:marble_polished_block 4`:
```
M = greek:marble_polished
+-+-+
|M|M|
+-+-+
|M|M|
+-+-+
```
`greek:marble_tile_1 4`:
```
B = greek:marble_polished_block
+-+-+
|B|B|
+-+-+
|B|B|
+-+-+
```
`greek:metope_man_standing 2`:
```
Shapeless: greek:marble_polished, group:greek:red_clay
```
`greek:red_clay 8`:
```
C = group:greek:clay_lump
D = dye:red
+-+-+-+
|C|C|C|
+-+-+-+
|C|D|C|
+-+-+-+
|C|C|C|
+-+-+-+
```
`greek:red_clay_fired`:
```
Cooking: group:greek:red_clay
```
`greek:render 2`:
```
Shapeless: greek:cement, group:sand, group:water_bucket
Replacements: (group:water_bucket, bucket:bucket_empty)
```
`greek:shutters_1 2`:
```
W = group:greek:blue_wood
+-+-+-+
|W| |W|
+-+-+-+
|W| |W|
+-+-+-+
```
`greek:triglyph 4`:
```
M = greek:marble_polished
+-+-+-+
|M| |M|
+-+-+-+
|M| |M|
+-+-+-+
or
Shapeless (1): greek:triglyph_blue, dye:white
```
`greek:triglyph_blue`:
```
Shapeless: greek:triglyph, dye:blue
```
`greek:vase_amphora_1 2`:
```
C = group:greek:red_clay
+-+-+-+
|C| |C|
+-+-+-+
|C| |C|
+-+-+-+
|C|C|C|
+-+-+-+
```
`greek:vase_stamnos_1 2`:
```
C = group:greek:red_clay
+-+-+-+
|C| |C|
+-+-+-+
|C|C|C|
+-+-+-+
```
Craftrings:
* `greek:door_*_a`
* `greek:marble_painted_center_*`
* `greek:marble_painted_corner_*`
* `greek:marble_painted_edge_*`
* `greek:marble_pillar_base_*`
* `greek:marble_pillar_head_*`
* `greek:marble_tile_*`
* `greek:metope_*`
* `greek:shutters_*`
* `greek:vase_amphora_*`
* `greek:vase_stamnos_*`
</details>

48
compat.lua Normal file
View File

@ -0,0 +1,48 @@
-- Aliases for legacy greeknodes mod
local nodes = {
{"marble_cobble", "marble_cobble"},
{"polished_marble", "marble_polished"},
{"polished_marble_block", "marble_polished_block"},
{"pillar", "marble_pillar"},
{"pillar_head_dioric", "marble_pillar_head_doric"},
{"pillar_head_corinthian", "marble_pillar_head_corinthian"},
{"pillar_head_ionic", "marble_pillar_head_ionic"},
{"marble_tile", "marble_tile_1"},
{"gilded_gold_block", "gilded_gold"},
}
for _, pair in pairs(nodes) do
minetest.register_alias("greeknodes:" .. pair[1], "greek:" .. pair[2])
end
local stairs = {
{"marblepillar_stair", "marble_pillar"},
{"marblecobble_stair", "marble_cobble"},
{"polishedmarble_stair", "marble_polished"},
{"polishedmarbleblock_stair", "marble_polished_block"},
{"marbletile_stair", "marble_tile_1"},
{"gilded_gold_stair", "gilded_gold"},
}
for _, shape in pairs({"stair_", "slab_", "stair_inner_", "stair_outer_"}) do
for _, pair in pairs(stairs) do
minetest.register_alias("stairs:" .. shape .. pair[1], "greek:" .. shape .. pair[2])
end
end
if greek.settings_get("alias_polished_marble") then
minetest.register_alias("greeknodes:marble", "greek:marble_polished")
else
minetest.register_on_mods_loaded(function()
for _, item in ipairs(greek.settings_list("marble")) do
if minetest.registered_nodes[item] then
return minetest.register_alias("greeknodes:marble", item)
end
end
error("[greek] No valid marble found to alias 'greeknodes:marble' to. Please check your configuration and loaded mods.")
end)
end
minetest.register_alias("greeknodes:tar_base", "")
minetest.register_alias("greeknodes:tar", "")

285
decor.lua Normal file
View File

@ -0,0 +1,285 @@
-- Misc decor nodes (marble detailing, render, etc)
-- Triglyphs
greek.register_node_and_stairs("greek:triglyph", {
description = "Marble Triglyph",
tiles = {"greek_marble_polished.png", "greek_marble_polished.png", "greek_triglyph.png"},
paramtype2 = "facedir",
groups = greek.marble_groups,
sounds = greek.marble_sounds,
})
minetest.register_craft({
output = "greek:triglyph 4",
recipe = {
{"greek:marble_polished", "", "greek:marble_polished"},
{"greek:marble_polished", "", "greek:marble_polished"},
}
})
minetest.register_craft({
output = "greek:triglyph",
recipe = {"greek:triglyph_blue", "dye:white"},
type = "shapeless",
})
greek.register_node_and_stairs("greek:triglyph_blue", {
description = "Blue Marble Triglyph",
tiles = {"greek_marble_polished.png^[multiply:#4a797d", "greek_marble_polished.png^[multiply:#4a797d", "greek_triglyph.png^[multiply:#4a797d"},
paramtype2 = "facedir",
groups = greek.marble_groups,
sounds = greek.marble_sounds,
})
minetest.register_craft({
output = "greek:triglyph_blue",
recipe = {"greek:triglyph", "dye:blue"},
type = "shapeless",
})
-- Metopes
local metopes = {
"man_standing",
"two_men",
"three_men",
"crowd",
"gaurd",
"chariot",
"horse",
"horses",
"centaur_and_man",
"rider",
"man_laying",
"man_kneeling",
}
for _, name in pairs(metopes) do
minetest.register_node("greek:metope_" .. name, {
description = "Metope (" .. (" " .. name):gsub("%W%l", string.upper):sub(2) .. ")",
tiles = {
"greek_metope_base.png", "greek_metope_base.png",
"greek_metope_base.png^greek_metope_" .. name .. ".png^[transformFX", "greek_metope_base.png^greek_metope_" .. name .. ".png^[transformFX",
"greek_metope_base.png^greek_metope_" .. name .. ".png", "greek_metope_base.png^greek_metope_" .. name .. ".png"},
paramtype2 = "facedir",
groups = greek.marble_groups,
sounds = greek.marble_sounds,
})
end
greek.register_craftring("greek:metope_%s", metopes)
minetest.register_craft({
output = "greek:metope_" .. metopes[1] .. " 2",
recipe = {"greek:marble_polished", "group:greek:red_clay"},
type = "shapeless",
})
-- Acroterions
minetest.register_node("greek:acroterion", {
description = "Marble Acroterion",
-- drawtype = "allfaces", -- #9210
tiles = {
"blank.png", "greek_marble_polished.png",
"blank.png", "blank.png",
"blank.png", {name = "greek_acroterion.png", backface_culling = false},
},
use_texture_alpha = true,
paramtype2 = "facedir",
groups = greek.marble_groups,
sounds = greek.marble_sounds,
})
minetest.register_craft({
output = "greek:acroterion 2",
recipe = {
{"", "greek:marble_polished", ""},
{"", "greek:marble_polished", ""},
{"greek:marble_polished", "greek:marble_polished", "greek:marble_polished"},
},
})
minetest.register_craft({
output = "greek:acroterion",
recipe = {"greek:acroterion_corner"},
type = "shapeless",
})
minetest.register_node("greek:acroterion_corner", {
description = "Marble Acroterion Corner",
-- drawtype = "allfaces", -- #9210
tiles = {
"blank.png", "greek_marble_polished.png",
"blank.png", {name = "greek_acroterion_corner.png^[transformFX", backface_culling = false},
"blank.png", {name = "greek_acroterion_corner.png", backface_culling = false},
},
use_texture_alpha = true,
paramtype2 = "facedir",
groups = greek.marble_groups,
sounds = greek.marble_sounds,
})
minetest.register_craft({
output = "greek:acroterion_corner 2",
recipe = {
{"greek:marble_polished", "", ""},
{"greek:marble_polished", "", ""},
{"greek:marble_polished", "greek:marble_polished", "greek:marble_polished"},
},
})
minetest.register_craft({
output = "greek:acroterion_corner 2",
recipe = {
{"", "", "greek:marble_polished"},
{"", "", "greek:marble_polished"},
{"greek:marble_polished", "greek:marble_polished", "greek:marble_polished"},
},
})
minetest.register_craft({
output = "greek:acroterion_corner",
recipe = {"greek:acroterion"},
type = "shapeless",
})
-- Render
minetest.register_craftitem("greek:cement", {
description = "Cement",
inventory_image = "greek_cement.png",
})
for _, item in pairs(greek.settings_list("limestone")) do
greek.add_group(item, "limestone")
end
minetest.register_craft({
output = "greek:cement",
recipe = "group:greek:limestone",
type = "cooking",
cooktime = 7,
})
-- Palette colors and corresponding dyes
local palette = {[0] = "#ffffff", "#e63845", "#ff6f45", "#f6dd4a", "#83d753", "#526ff0", "#d07fef", "#2b2b2b"}
local dyes = {["dye:white"] = 0, ["dye:red"] = 1, ["dye:orange"] = 2, ["dye:yellow"] = 3, ["dye:green"] = 4, ["dye:blue"] = 5, ["dye:violet"] = 6, ["dye:black"] = 7}
greek.register_node_and_stairs("greek:render", {
description = "Render",
tiles = {"greek_render.png"},
paramtype2 = "color",
palette = "greek_render_palette.png",
groups = {cracky = 3},
sounds = greek.marble_sounds,
on_punch = function(pos, node, puncher, pointed)
if not minetest.is_protected(pos, puncher:get_player_name()) then
local stack = puncher:get_wielded_item():get_name()
if dyes[stack] then
minetest.swap_node(pos, {name = node.name, param2 = (dyes[stack] * 32) + (node.param2 % 32)})
end
end
return minetest.node_punch(pos, node, puncher, pointed)
end,
})
minetest.register_craft({
output = "greek:render 2",
recipe = {"greek:cement", "group:sand", "group:water_bucket"},
replacements = {{"group:water_bucket", "bucket:bucket_empty"}},
type = "shapeless",
})
for dye, color in pairs(dyes) do
minetest.register_craft({
output = minetest.itemstring_with_color("greek:render", palette[color]),
recipe = {"greek:render", dye},
replacements = {{dye, dye}},
type = "shapeless",
})
end
-- Misc
greek.register_node_and_stairs("greek:gilded_gold", {
description = "Gilded Gold",
tiles = {"greek_gilded_gold.png"},
groups = {cracky = 3, oddly_breakable_by_hand = 1},
sounds = greek.default_sounds("node_sound_metal_defaults"),
})
for _, item in pairs(greek.settings_list("gold_block")) do
greek.add_group(item, "gold_block")
end
minetest.register_craft({
output = "greek:gilded_gold",
recipe = "group:greek:gold_block",
type = "cooking",
cooktime = 25,
})
greek.register_node_and_stairs("greek:red_clay_fired", {
description = "Fired Red Clay",
tiles = {"greek_red_clay_fired.png"},
groups = {cracky = 3, oddly_breakable_by_hand = 2},
sounds = greek.default_sounds("node_sound_stone_defaults"),
})
for _, item in pairs(greek.settings_list("red_clay")) do
-- Only bother registering our own if it is used
if item == "greek:red_clay" then
minetest.register_craftitem("greek:red_clay", {
description = "Red Clay Lump",
inventory_image = "greek_red_clay.png",
})
for _, craftitem in pairs(greek.settings_list("clay_lump")) do
greek.add_group(craftitem, "clay_lump")
end
minetest.register_craft({
output = "greek:red_clay 8",
recipe = {
{"group:greek:clay_lump", "group:greek:clay_lump", "group:greek:clay_lump"},
{"group:greek:clay_lump", "dye:red", "group:greek:clay_lump"},
{"group:greek:clay_lump", "group:greek:clay_lump", "group:greek:clay_lump"},
},
})
end
greek.add_group(item, "red_clay")
end
minetest.register_craft({
output = "greek:red_clay_fired",
recipe = "group:greek:red_clay",
type = "cooking",
cooktime = 10,
})
minetest.register_node("greek:chain", {
description = "Chain",
drawtype = "mesh",
mesh = "greek_chain.obj",
tiles = {{name = "greek_chain.png", backface_culling = false}},
inventory_image = "greek_chain_inv.png",
paramtype2 = "facedir",
place_param2 = 0,
paramtype = "light",
sunlight_propagates = true,
climbable = true,
walkable = false,
selection_box = {
type = "fixed",
fixed = {{-3 / 16, -0.5, -3 / 16, 3 / 16, 0.5, 3 / 16}},
},
groups = {choppy = 3, oddly_breakable_by_hand = 2},
sounds = greek.default_sounds("node_sound_metal_defaults")
})
minetest.register_craft({
output = "greek:chain 12",
recipe = {
{"greek:gilded_gold"},
{"greek:gilded_gold"},
{"greek:gilded_gold"},
}
})

329
doors.lua Normal file
View File

@ -0,0 +1,329 @@
-- Custom door implementation because I don't want to depend on other mods for content.
-- Registers only 2 nodes per door. Relies on front and back faces being identical. Locked doors implemented via param2.
local function can_interact(pos, player)
local meta = minetest.get_meta(pos)
local owner = meta:get_string("owner")
-- Not locked, is owner, or has valid key
return owner == "" or player:get_player_name() == owner or meta:get_string("secret") == player:get_wielded_item():get_meta():get_string("secret")
end
local function toggle_door(pos)
local node = minetest.get_node(pos)
local meta = minetest.get_meta(pos)
local door, flip = node.name:match("^(.+_)(%w)$")
local yaw = minetest.dir_to_yaw(minetest.facedir_to_dir(node.param2))
local rot = minetest.dir_to_facedir(minetest.yaw_to_dir(yaw + math.rad(flip == "a" and -90 or 90)))
minetest.set_node({x = pos.x, y = pos.y + 1, z = pos.z}, {name = "greek:door_blank", param2 = rot})
minetest.swap_node(pos, {name = door .. (flip == "a" and "b" or "a"), param2 = rot + (meta:get_string("owner") ~= "" and 128 or 0)})
local state = (meta:get_int("state") + 1) % 2
meta:set_int("state", state)
if minetest.get_modpath("doors") then minetest.sound_play("doors_door_" .. ({"close", "open"})[state + 1], pos, true) end
end
minetest.register_node("greek:door_blank", {
drawtype = "airlike",
paramtype = "light",
sunlight_propagates = true,
paramtype2 = "facedir",
walkable = true,
pointable = false,
diggable = false,
buildable_to = false,
floodable = false,
drop = "",
groups = {not_in_creative_inventory = 1},
collision_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, -6 / 16},
},
})
local door_count = 4
for i = 1, door_count do
local def = {
description = "Blue Door " .. i,
drawtype = "mesh",
mesh = "greek_door.obj",
tiles = {{name = "greek_door_" .. i .. ".png", backface_culling = true, color = "white"}},
overlay_tiles = {"greek_door_handle.png"},
paramtype = "light",
sunlight_propagates = true,
paramtype2 = "colorfacedir",
palette = "greek_door_palette.png",
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 1.5, -6 / 16},
},
collision_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 1.5, -6 / 16},
},
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, door = 1},
on_rightclick = function(pos, _, clicker) if can_interact(pos, clicker) then toggle_door(pos) end end,
on_key_use = function(pos, player) if can_interact(pos, player) then toggle_door(pos) end end,
on_skeleton_key_use = function(pos, player, newsecret)
local meta = minetest.get_meta(pos)
local name = player:get_player_name()
local owner = meta:get_string("owner")
if owner ~= name then
if owner ~= "" then minetest.chat_send_player(name, "You do not own this door.") end
return
end
local secret = meta:get_string("secret")
secret = secret ~= "" and secret or newsecret
meta:set_string("secret", secret)
return secret
end,
on_punch = function(pos, node, puncher, pointed)
-- Allow binding a key to multiple doors
local stack = puncher:get_wielded_item()
print(stack:get_name())
if minetest.get_item_group(stack:get_name(), "key") == 1 then
local meta = minetest.get_meta(pos)
local name = puncher:get_player_name()
if meta:get_string("owner") == name then
local current = meta:get_string("secret")
local new = stack:get_meta():get_string("secret")
if current == "" then
meta:set_string("secret", new)
elseif current ~= new then
minetest.chat_send_player(name, "This door has already been bound to a key.")
end
end
end
minetest.node_punch(pos, node, puncher, pointed)
end,
on_rotate = function() return false end,
on_dig = function(pos, node, digger)
minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z})
minetest.set_node({x = pos.x, y = pos.y + 1, z = pos.z}, {name = "air"})
return minetest.node_dig(pos, node, digger)
end,
on_blast = function(pos)
if minetest.get_meta(pos):get_string("owner") ~= "" then return end
local name = minetest.get_node(pos).name
minetest.remove_node(pos)
minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z})
return {name}
end,
}
do -- Register normal version
local defcopy = table.copy(def)
-- Check for obstructions and place invisible node
defcopy.on_place = function(itemstack, placer, pointed)
local pos
if pointed.type ~= "node" then return itemstack end
local node = minetest.get_node(pointed.under)
local pdef = minetest.registered_nodes[node.name]
if pdef and pdef.on_rightclick and not placer:get_player_control().sneak then
return pdef.on_rightclick(pointed.under, node, placer, itemstack, pointed)
end
if pdef and pdef.buildable_to then
pos = pointed.under
else
pos = pointed.above
node = minetest.get_node(pos)
pdef = minetest.registered_nodes[node.name]
if not pdef or not pdef.buildable_to then return itemstack end
end
local above = {x = pos.x, y = pos.y + 1, z = pos.z}
local top_node = minetest.get_node_or_nil(above)
local topdef = top_node and minetest.registered_nodes[top_node.name]
if not topdef or not topdef.buildable_to then return itemstack end
local pn = placer and placer:get_player_name() or ""
if minetest.is_protected(pos, pn) or minetest.is_protected(above, pn) then return itemstack end
return minetest.item_place_node(itemstack, placer, pointed)
end
-- Set metadata and rotate door
defcopy.after_place_node = function(pos, placer)
local node = minetest.get_node(pos)
local meta = minetest.get_meta(pos)
-- Check if door is locked
if math.floor(node.param2 / 32) >= 4 then
local name = placer:get_player_name()
meta:set_string("owner", name)
meta:set_string("infotext", "Blue Door\nOwned by " .. name)
end
meta:set_int("state", 0)
local dir = node.param2 % 32
local ref = {
{x = -1, y = 0, z = 0},
{x = 0, y = 0, z = 1},
{x = 1, y = 0, z = 0},
{x = 0, y = 0, z = -1},
}
local aside = {
x = pos.x + ref[dir + 1].x,
y = pos.y + ref[dir + 1].y,
z = pos.z + ref[dir + 1].z,
}
if minetest.get_item_group(minetest.get_node(aside).name, "door") == 1 then
minetest.swap_node(pos, {name = node.name:match("^(.+_)%w$") .. "b", param2 = node.param2})
end
minetest.set_node({x = pos.x, y = pos.y + 1, z = pos.z}, {name = "greek:door_blank", param2 = node.param2})
end
defcopy.color = "#242424"
-- Use overlay for door because it wont be colored
defcopy.inventory_overlay = "greek_door_" .. i .. "_inv.png"
defcopy.inventory_image = "greek_door_inv_handle.png"
defcopy.wield_overlay = "greek_door_" .. i .. "_inv.png"
defcopy.wield_image = "greek_door_inv_handle.png"
minetest.register_node("greek:door_" .. i .. "_a", defcopy)
end
do -- Register mirrored version (should not be obtainable normally)
local defcopy = table.copy(def)
-- Fancy flipping
local front = "([combine\\:16x32\\:0,0=%s\\^[transformFX)"
local back = "([combine\\:16x32\\:-16,0=%s\\^[transformFX)"
local sides = "([combine\\:4x32\\:-32,0=%s\\^[transformFX)"
local tops = "([combine\\:2x32\\:-36,0=%s\\^[transformFX)"
defcopy.tiles[1].name = (("[combine:38x32:0,0=%s:16,0=%s:32,0=%s:36,0=%s"):format(front, back, sides, tops):gsub("%%s", def.tiles[1].name))
defcopy.overlay_tiles = {(("[combine:38x32:0,0=([combine\\:16x32\\:0,0=%s\\^[transformFX):16,0=([combine\\:16x32\\:-16,0=%s\\^[transformFX)"):gsub("%%s", def.overlay_tiles[1]))}
defcopy.groups.not_in_creative_inventory = 1
defcopy.drop = "greek:door_" .. i .. "_a"
defcopy.preserve_metadata = function(_, node, oldmeta, drops)
-- Preserve locked state
if oldmeta.owner then
local meta = drops[1]:get_meta()
meta:set_int("palette_index", 128)
meta:set_string("description", "Locked " .. minetest.registered_items[node.name].description)
meta:set_string("color", "#dcdcdc")
end
end
minetest.register_node("greek:door_" .. i .. "_b", defcopy)
end
end
greek.register_craftring("greek:door_%s_a", door_count)
for _, item in pairs(greek.settings_list("blue_wood")) do
-- Only bother registering our own if it is used
if item == "greek:blue_wood" then
greek.register_node_and_stairs("greek:blue_wood", {
description = "Blue Wood",
tiles = {"greek_blue_wood.png"},
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 2},
sounds = greek.default_sounds("node_sound_wood_defaults"),
})
minetest.register_craft({
output = "greek:blue_wood",
recipe = {"group:wood", "dye:blue"},
type = "shapeless",
})
end
greek.add_group(item, "blue_wood")
end
minetest.register_craft({
output = "greek:door_1_a 2",
recipe = {
{"group:greek:blue_wood", "group:greek:blue_wood"},
{"group:greek:blue_wood", "group:greek:blue_wood"},
{"group:greek:blue_wood", "group:greek:blue_wood"},
},
})
for _, item in pairs(greek.settings_list("door_lock")) do
greek.add_group(item, "door_lock")
end
minetest.register_craft({
output = ItemStack({
name = "greek:door_1_a",
meta = {
description = "Locked " .. minetest.registered_items["greek:door_1_a"].description,
color = "#dcdcdc",
palette_index = 128,
},
}):to_string(),
recipe = {"greek:door_1_a", "group:greek:door_lock"},
type = "shapeless",
})
local shutter_count = 3
for i = 1, shutter_count do
local def = {
description = "Blue Shutters " .. i,
drawtype = "mesh",
mesh = "greek_shutters.obj",
tiles = {{name = "greek_shutters_" .. i .. ".png", backface_culling = true}, "blank.png"},
paramtype = "light",
sunlight_propagates = true,
paramtype2 = "facedir",
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, 6 / 16, 0.5, 0.5, 0.5},
},
collision_box = {
type = "fixed",
fixed = {-0.5, -0.5, 6 / 16, 0.5, 0.5, 0.5},
},
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
on_rightclick = function(pos, node)
minetest.swap_node(pos, {name = "greek:shutters_" .. i .. "_open", param2 = node.param2})
if minetest.get_modpath("doors") then minetest.sound_play("doors_door_open", pos, true) end
end,
}
minetest.register_node("greek:shutters_" .. i, def)
def = table.copy(def)
def.tiles = {"blank.png", def.tiles[1]}
def.groups.not_in_creative_inventory = 1
def.drop = "greek:shutters_" .. i
def.on_rightclick = function(pos, node)
minetest.swap_node(pos, {name = "greek:shutters_" .. i, param2 = node.param2})
if minetest.get_modpath("doors") then minetest.sound_play("doors_door_close", pos, true) end
end
minetest.register_node("greek:shutters_" .. i .. "_open", def)
end
greek.register_craftring("greek:shutters_%s", shutter_count)
minetest.register_craft({
output = "greek:shutters_1 2",
recipe = {
{"group:greek:blue_wood", "", "group:greek:blue_wood"},
{"group:greek:blue_wood", "", "group:greek:blue_wood"},
},
})

389
init.lua
View File

@ -1,279 +1,120 @@
-- Marble
minetest.register_node("greeknodes:marble_cobble", {
description = "Marble Cobble",
tiles = {"greeknodes_marble_cobble.png"},
groups = {cracky = 3},
sounds = default.node_sound_stone_defaults(),
})
greek = {}
minetest.register_node("greeknodes:polished_marble", {
description = "Polished Marble",
tiles = {"greeknodes_marble_polished.png"},
groups = {cracky = 3},
sounds = default.node_sound_stone_defaults(),
})
local MODNAME = minetest.get_current_modname()
local MODPATH = minetest.get_modpath(MODNAME)
minetest.register_node("greeknodes:polished_marble_block", {
description = "Polished Marble Block",
tiles = {"greeknodes_marble_polished_block.png"},
groups = {cracky = 3},
sounds = default.node_sound_stone_defaults(),
})
minetest.log("action", "[greek] Loading ...")
minetest.register_node("greeknodes:pillar", {
description = "Marble Pillar",
paramtype2 = "facedir",
tiles = {"greeknodes_marble_pillar_top.png", "greeknodes_marble_pillar_top.png", "greeknodes_marble_pillar_side.png"},
groups = {cracky = 3},
sounds = default.node_sound_stone_defaults(),
on_place = minetest.rotate_node
})
minetest.register_node("greeknodes:pillar_head_dioric", {
description = "Marble Pillar Head (Dioric)",
tiles = {"greeknodes_marble_pillar_top.png", "greeknodes_marble_pillar_top.png", "greeknodes_marble_pillar_head_dioric.png"},
groups = {cracky = 3},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node("greeknodes:pillar_head_corinthian", {
description = "Marble Pillar Head (Corinthian)",
tiles = {"greeknodes_marble_pillar_top.png", "greeknodes_marble_pillar_top.png", "greeknodes_marble_pillar_head_corinthian.png"},
groups = {cracky = 3},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node("greeknodes:pillar_head_ionic", {
description = "Marble Pillar Head (Ionic)",
paramtype2 = "facedir",
tiles = {"greeknodes_marble_pillar_top.png", "greeknodes_marble_pillar_top.png", "greeknodes_marble_pillar_head_ionic_side.png", "greeknodes_marble_pillar_head_ionic_side.png", "greeknodes_marble_pillar_head_ionic.png", "greeknodes_marble_pillar_head_ionic.png"},
groups = {cracky = 3},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node("greeknodes:marble_tile", {
description = "Marble Tile",
tiles = {"greeknodes_marble_tile.png"},
groups = {cracky = 3},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node("greeknodes:gilded_gold_block", {
description = "Gilded Gold Block",
tiles = {"greeknodes_gilded_gold.png"},
groups = {cracky = 3, oddly_breakable_by_hand = 1},
sounds = default.node_sound_metal_defaults(),
})
-- Stairs & Slabs
stairs.register_stair_and_slab(
"marblepillar_stair",
"greeknodes:pillar",
{cracky = 3},
{"greeknodes_marble_pillar_top.png", "greeknodes_marble_pillar_top.png", "greeknodes_marble_pillar_side.png"},
"Marble Pillar Stair",
"Marble Pillar Slab",
default.node_sound_stone_defaults()
)
stairs.register_stair_and_slab(
"marblecobble_stair",
"greeknodes:marble_cobble",
{cracky = 3},
{"greeknodes_marble_cobble.png"},
"Marble Cobble Stair",
"Marble Cobble Slab",
default.node_sound_stone_defaults()
)
stairs.register_stair_and_slab(
"polishedmarble_stair",
"greeknodes:polished_marble",
{cracky = 3},
{"greeknodes_marble_polished.png"},
"Polished Marble Stair",
"Polished Marble Slab",
default.node_sound_stone_defaults()
)
stairs.register_stair_and_slab(
"polishedmarbleblock_stair",
"greeknodes:polished_marble_block",
{cracky = 3},
{"greeknodes_marble_polished_block.png"},
"Polished Marble Block Stair",
"Polished Marble Block Slab",
default.node_sound_stone_defaults()
)
stairs.register_stair_and_slab(
"marbletile_stair",
"greeknodes:marble_tile",
{cracky = 3},
{"greeknodes_marble_tile.png"},
"Marble Tile Stair",
"Marble Tile Slab",
default.node_sound_stone_defaults()
)
stairs.register_stair_and_slab(
"gilded_gold_stair",
"greeknodes:gilded_gold_block",
{cracky = 3},
{"greeknodes_gilded_gold.png"},
"Gilded Gold Block Stair",
"Gilded Gold Block Slab",
default.node_sound_metal_defaults()
)
minetest.register_craft({
type = "cooking",
output = "greeknodes:gilded_gold_block",
recipe = "default:goldblock",
cooktime = 25,
})
minetest.register_craft({
output = 'greeknodes:polished_marble 9',
recipe = {
{'building_blocks:Marble', 'building_blocks:Marble', 'building_blocks:Marble'},
{'building_blocks:Marble', 'building_blocks:Marble', 'building_blocks:Marble'},
{'building_blocks:Marble', 'building_blocks:Marble', 'building_blocks:Marble'},
}
})
minetest.register_craft({
output = 'greeknodes:polished_marble_block 4',
recipe = {
{'greeknodes:polished_marble', 'greeknodes:polished_marble'},
{'greeknodes:polished_marble', 'greeknodes:polished_marble'},
}
})
minetest.register_craft({
output = 'greeknodes:marble_cobble 5',
recipe = {
{'greeknodes:polished_marble', '', 'greeknodes:polished_marble'},
{'', 'greeknodes:polished_marble', ''},
{'greeknodes:polished_marble', '', 'greeknodes:polished_marble'},
}
})
minetest.register_craft({
output = 'greeknodes:pillar_head_dioric 2',
recipe = {
{'greeknodes:pillar'},
{'greeknodes:pillar'},
}
})
minetest.register_craft({
output = 'greeknodes:pillar_head_ionic 4',
recipe = {
{'greeknodes:pillar', '', 'greeknodes:pillar'},
{'', 'greeknodes:pillar', ''},
{'', 'greeknodes:pillar', ''},
}
})
minetest.register_craft({
output = 'greeknodes:pillar_head_corinthian 9',
recipe = {
{'greeknodes:pillar', 'greeknodes:pillar', 'greeknodes:pillar'},
{'greeknodes:pillar', 'greeknodes:pillar', 'greeknodes:pillar'},
{'greeknodes:pillar', 'greeknodes:pillar', 'greeknodes:pillar'},
}
})
minetest.register_craft({
output = 'greeknodes:marble_tile 4',
recipe = {
{'building_blocks:Marble', 'building_blocks:Marble'},
{'building_blocks:Marble', 'building_blocks:Marble'},
}
})
if minetest.get_modpath("homedecor") then
minetest.register_craft({
output = 'greeknodes:pillar 2',
recipe = {
{'building_blocks:Marble'},
{'building_blocks:Marble'},
}
})
minetest.register_alias("greeknodes:marble", "building_blocks:Marble")
minetest.register_alias("greeknodes:tar", "building_blocks:Tar")
minetest.register_alias("greeknodes:tar_base", "building_blocks:tar_base")
else
minetest.register_node("greeknodes:marble", {
description = "Marble",
tiles = {"greeknodes_marble.png"},
is_ground_content = true,
groups = {cracky = 3, marble = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_craft({
output = 'greeknodes:pillar 2',
recipe = {
{'greeknodes:marble'},
{'greeknodes:marble'},
}
})
minetest.register_craft({
type = "fuel",
recipe = "greeknodes:tar",
burntime = 40,
})
minetest.register_craft({
type = "cooking",
output = "greeknodes:tar",
recipe = "greeknodes:tar_base",
})
minetest.register_craftitem("greeknodes:tar_base", {
description = "Tar Base",
image = "greeknodes_tar_base.png",
})
minetest.register_craft({
output = "greeknodes:marble 9",
recipe = {
{"default:clay", "greeknodes:tar", "default:clay"},
{"greeknodes:tar","default:clay", "greeknodes:tar"},
{"default:clay", "greeknodes:tar","default:clay"},
}
})
minetest.register_node("greeknodes:tar", {
description = "Tar",
tiles = {"greeknodes_tar_block.png"},
is_ground_content = true,
groups = {crumbly = 1, tar_block = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_craft({
output = 'greeknodes:tar_base 2',
recipe = {
{"default:coal_lump", "default:gravel"},
{"default:gravel", "default:coal_lump"}
}
})
minetest.register_craft({
output = 'greeknodes:tar_base 2',
recipe = {
{"default:gravel", "default:coal_lump"},
{"default:coal_lump", "default:gravel"}
}
})
minetest.register_alias("building_blocks:Marble", "greeknodes:marble")
minetest.register_alias("building_blocks:Tar", "greeknodes:tar")
minetest.register_alias("building_blocks:tar_base", "greeknodes:tar_base")
local function include(filename)
minetest.log("info", "[greek] Loading " .. filename .. " ...")
return dofile(MODPATH .. "/" .. filename), minetest.log("info", "[greek] Loaded " .. filename)
end
local function convert(value, type)
return ({number = tonumber(value), string = tostring(value), boolean = value == "true"})[type]
end
-- Manually parse defaults because minetest.settings:get() wont return them
local settingtypes = {}
for line in io.lines(MODPATH .. "/settingtypes.txt") do
if not line:match("^%s*#") and not line:match("^%s*$") then
local name, _, stype, default = line:match("%s*(%S-) (%(.*%)) (%w+) ?(.*)")
-- Convert string value to type (int = number, boolean = bool, else string)
settingtypes[name] = convert(default, ({int = "number", bool = "boolean"})[stype] or "string")
end
end
function greek.settings_get(key)
key = "greek." .. key
local default = settingtypes[key]
local setting = minetest.settings:get(key)
return (setting ~= nil and {convert(setting, type(default))} or {default})[1]
end
-- Convert comma-deliminated string setting to table
function greek.settings_list(key)
return greek.settings_get(key):gsub("%s", ""):split(",")
end
-- Return default sounds if available
function greek.default_sounds(name)
if default and default[name] then return default[name]() end
end
local register_stairs = include("stairs.lua")
function greek.register_node_and_stairs(name, definition)
minetest.register_node(name, definition)
register_stairs(name, definition, name)
end
-- Add custom group to item
local function add_group(item, group)
local def = minetest.registered_items[item]
if def then
local groups = table.copy(def.groups or {})
groups["greek:" .. group] = 1
minetest.override_item(item, {groups = groups})
end
end
local overrides = {}
local loaded = false
function greek.add_group(item, group)
if not loaded then
overrides[item] = group
else
add_group(item, group)
end
end
minetest.register_on_mods_loaded(function()
for item, group in pairs(overrides) do
add_group(item, group)
end
loaded = true
end)
-- Registers recipes to make a sequence of items by using a single item type to get the next item type
-- `item` is a string that can be formatted with a given number or name from `total_or_table`
-- 1 -> 2, n -> n + 1, last -> first
-- Also registers crafts for copying one type to another (2 target type + 1 other type = 3 target type)
function greek.register_craftring(item, total_or_table)
if tonumber(total_or_table) then
-- If total, make table filled with number sequence
total_or_table = (function(a, b) for i = 1, b do a[i] = i end return a end)({}, total_or_table)
end
for i = 1, #total_or_table do
local itemname = item:format(total_or_table[i])
minetest.register_craft({
output = itemname,
recipe = {item:format(total_or_table[(i - 2) % #total_or_table + 1])},
type = "shapeless",
})
-- Type copying using groups
local groups = table.copy(minetest.registered_items[itemname].groups)
groups[item] = 1
minetest.override_item(itemname, {
groups = groups,
})
minetest.register_craft({
output = itemname,
recipe = {itemname, itemname, "group:" .. item}, -- Use 2 to set target
type = "shapeless",
replacements = {{itemname, itemname}, {itemname, itemname}}, -- Keep targets
})
end
end
include("marble.lua")
include("decor.lua")
include("doors.lua")
include("vases.lua")
include("lighting.lua")
if greek.settings_get("greeknodes_aliases") then include("compat.lua") end
minetest.log("action", "[greek] Loaded.")

139
lighting.lua Normal file
View File

@ -0,0 +1,139 @@
-- Lit nodes.
minetest.register_node("greek:fire_bowl", {
description = "Fire Bowl",
drawtype = "mesh",
mesh = "greek_fire_bowl.obj",
tiles = {"greek_fire_bowl.png", "blank.png"},
inventory_image = "greek_fire_bowl_inv.png",
paramtype = "light",
sunlight_propagates = true,
paramtype2 = "facedir",
place_param2 = 0,
selection_box = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}},
collision_box = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}},
groups = {cracky = 3, oddly_breakable_by_hand = 2},
sounds = greek.default_sounds("node_sound_glass_defaults"),
on_place = function(stack, placer, pointed)
-- If placed against ceiling, set to hanging fire bowl
local s, p = minetest.item_place((pointed.under.y > pointed.above.y and stack:replace("greek:fire_bowl_hanging") and stack) or stack, placer, pointed)
return s:replace("greek:fire_bowl") and s, p
end,
on_punch = function(pos, _, puncher)
for _, group in pairs({"fire", "igniter", "torch"}) do
if minetest.get_item_group(puncher:get_wielded_item():get_name(), group) > 0 then
return minetest.swap_node(pos, {name = "greek:fire_bowl_lit"})
end
end
end,
})
minetest.register_node("greek:fire_bowl_lit", {
description = "Fire Bowl (Lit)",
drawtype = "mesh",
mesh = "greek_fire_bowl.obj",
tiles = {"greek_fire_bowl.png", {name = "greek_fire.png", animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 1}}},
inventory_image = "greek_fire_bowl_lit_inv.png",
paramtype = "light",
sunlight_propagates = true,
paramtype2 = "facedir",
place_param2 = 0,
selection_box = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}},
collision_box = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}},
light_source = 12,
drop = greek.settings_get("fire_bowl_dig_snuff") and "greek:fire_bowl" or nil,
groups = {cracky = 3, oddly_breakable_by_hand = 2, torch = 1},
sounds = greek.default_sounds("node_sound_glass_defaults"),
on_place = function(stack, placer, pointed)
local s, p = minetest.item_place((pointed.under.y > pointed.above.y and stack:replace("greek:fire_bowl_hanging_lit") and stack) or stack, placer, pointed)
return s:replace("greek:fire_bowl_lit") and s, p
end,
on_punch = function(pos, _, puncher)
for _, group in pairs({"water", "liquid", "water_bucket"}) do
if minetest.get_item_group(puncher:get_wielded_item():get_name(), group) > 0 then
return minetest.swap_node(pos, {name = "greek:fire_bowl"})
end
end
end,
})
minetest.register_node("greek:fire_bowl_hanging", {
description = "Hanging Fire Bowl (You hacker, you)",
drawtype = "mesh",
mesh = "greek_fire_bowl_hanging.obj",
tiles = {"greek_fire_bowl.png", "blank.png", "greek_chain.png"},
paramtype = "light",
sunlight_propagates = true,
paramtype2 = "facedir",
selection_box = {type = "fixed", fixed = {-0.5, -1.5, -0.5, 0.5, 0.5, 0.5}},
collision_box = {type = "fixed", fixed = {-0.5, -1.5, -0.5, 0.5, 0.5, 0.5}},
groups = {cracky = 3, oddly_breakable_by_hand = 2, not_in_creative_inventory = 1},
sounds = greek.default_sounds("node_sound_glass_defaults"),
drop = "greek:fire_bowl",
on_punch = function(pos, _, puncher)
for _, group in pairs({"fire", "igniter", "torch"}) do
if minetest.get_item_group(puncher:get_wielded_item():get_name(), group) > 0 then
return minetest.swap_node(pos, {name = "greek:fire_bowl_hanging_lit"})
end
end
end,
})
minetest.register_node("greek:fire_bowl_hanging_lit", {
description = "Hanging Fire Bowl (Lit) (You hacker, you)",
drawtype = "mesh",
mesh = "greek_fire_bowl_hanging.obj",
tiles = {"greek_fire_bowl.png", {name = "greek_fire.png", animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 1}}, "greek_chain.png"},
paramtype = "light",
sunlight_propagates = true,
paramtype2 = "facedir",
selection_box = {type = "fixed", fixed = {-0.5, -1.5, -0.5, 0.5, 0.5, 0.5}},
collision_box = {type = "fixed", fixed = {-0.5, -1.5, -0.5, 0.5, 0.5, 0.5}},
light_source = 12,
groups = {cracky = 3, oddly_breakable_by_hand = 2, not_in_creative_inventory = 1},
sounds = greek.default_sounds("node_sound_glass_defaults"),
drop = greek.settings_get("fire_bowl_dig_snuff") and "greek:fire_bowl" or "greek:fire_bowl_lit",
on_punch = function(pos, _, puncher)
for _, group in pairs({"water", "liquid", "water_bucket"}) do
if minetest.get_item_group(puncher:get_wielded_item():get_name(), group) > 0 then
return minetest.swap_node(pos, {name = "greek:fire_bowl_hanging"})
end
end
end,
})
minetest.register_craft({
output = "greek:fire_bowl 2",
recipe = {
{"greek:marble_polished", "", "greek:marble_polished"},
{"", "greek:gilded_gold", ""},
},
})
minetest.register_node("greek:lamp", {
description = "Lamp",
drawtype = "mesh",
mesh = "greek_lamp.obj",
tiles = {
{name = "greek_lamp.png"},
{name = "greek_lamp.png", animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 4, length = 1}}
},
inventory_image = "greek_lamp_inv.png",
wield_image = "greek_lamp_inv.png",
paramtype = "light",
sunlight_propagates = true,
paramtype2 = "facedir",
selection_box = {type = "fixed", fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -0.25, 6 / 16}},
collision_box = {type = "fixed", fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -0.25, 6 / 16}},
light_source = 8,
groups = {cracky = 3, oddly_breakable_by_hand = 2, torch = 1},
sounds = greek.default_sounds("node_sound_glass_defaults"),
})
minetest.register_craft({
output = "greek:lamp 2",
recipe = {
{"group:greek:red_clay", "", "group:greek:red_clay"},
{"", "group:greek:red_clay", ""},
},
})

228
marble.lua Normal file
View File

@ -0,0 +1,228 @@
-- Polished marble nodes
greek.marble_groups = {cracky = 2}
greek.marble_sounds = greek.default_sounds("node_sound_stone_defaults")
greek.register_node_and_stairs("greek:marble_polished", {
description = "Polished Marble",
tiles = {"greek_marble_polished.png"},
groups = greek.marble_groups,
sounds = greek.marble_sounds,
})
for _, item in pairs(greek.settings_list("marble")) do
greek.add_group(item, "marble")
end
minetest.register_craft({
output = "greek:marble_polished 9",
recipe = {
{"group:greek:marble", "group:greek:marble", "group:greek:marble"},
{"group:greek:marble", "group:greek:marble", "group:greek:marble"},
{"group:greek:marble", "group:greek:marble", "group:greek:marble"},
},
})
minetest.register_craft({
output = "greek:marble_polished",
recipe = "greek:marble_cobble",
type = "cooking",
cooktime = 5,
})
greek.register_node_and_stairs("greek:marble_polished_block", {
description = "Polished Marble Block",
tiles = {"greek_marble_polished_block.png"},
groups = greek.marble_groups,
sounds = greek.marble_sounds,
})
minetest.register_craft({
output = "greek:marble_polished_block 4",
recipe = {
{"greek:marble_polished", "greek:marble_polished"},
{"greek:marble_polished", "greek:marble_polished"},
}
})
greek.register_node_and_stairs("greek:marble_cobble", {
description = "Marble Cobble",
tiles = {"greek_marble_cobble.png"},
groups = greek.marble_groups,
sounds = greek.marble_sounds,
})
minetest.register_craft({
output = "greek:marble_cobble 5",
recipe = {
{"greek:marble_polished", "", "greek:marble_polished"},
{"", "greek:marble_polished", ""},
{"greek:marble_polished", "", "greek:marble_polished"},
},
})
-- Marble pillars
greek.register_node_and_stairs("greek:marble_pillar", {
description = "Marble Pillar",
tiles = {"greek_marble_pillar_top.png", "greek_marble_pillar_top.png", "greek_marble_pillar_side.png"},
paramtype2 = "facedir",
groups = greek.marble_groups,
sounds = greek.marble_sounds,
on_place = minetest.rotate_node,
})
minetest.register_craft({
output = "greek:marble_pillar 2",
recipe = {
{"greek:marble_polished"},
{"greek:marble_polished"},
},
})
local pillar_heads = {"doric", "ionic", "corinthian"}
for _, head in pairs(pillar_heads) do
minetest.register_node("greek:marble_pillar_head_" .. head, {
description = head:gsub("^%l", string.upper) .. " Marble Pillar Head",
tiles = {"greek_marble_pillar_top.png", "greek_marble_pillar_top.png", "greek_marble_pillar_head_" .. head .. ".png"},
paramtype2 = "facedir",
groups = greek.marble_groups,
sounds = greek.marble_sounds,
on_place = minetest.rotate_node,
})
minetest.register_node("greek:marble_pillar_base_" .. head, {
description = head:gsub("^%l", string.upper) .. " Marble Pillar Base",
tiles = {"greek_marble_pillar_top.png", "greek_marble_pillar_top.png", "greek_marble_pillar_base_" .. head .. ".png"},
paramtype2 = "facedir",
groups = greek.marble_groups,
sounds = greek.marble_sounds,
on_place = minetest.rotate_node,
})
end
greek.register_craftring("greek:marble_pillar_head_%s", pillar_heads)
greek.register_craftring("greek:marble_pillar_base_%s", pillar_heads)
minetest.register_craft({
output = "greek:marble_pillar_head_" .. pillar_heads[1] .. " 4",
recipe = {
{"greek:marble_pillar", "greek:marble_polished", "greek:marble_pillar"},
{"", "greek:marble_pillar", ""},
},
})
minetest.register_craft({
output = "greek:marble_pillar_base_" .. pillar_heads[1] .. " 4",
recipe = {
{"", "greek:marble_pillar", ""},
{"greek:marble_pillar", "greek:marble_polished", "greek:marble_pillar"},
},
})
-- Carved marble tiles
local tile_total = 6
for i = 1, tile_total do
greek.register_node_and_stairs("greek:marble_tile_" .. i, {
description = "Marble Tile " .. i,
tiles = {"greek_marble_tile_" .. i .. ".png"},
paramtype2 = "facedir",
groups = greek.marble_groups,
sounds = greek.marble_sounds,
})
end
greek.register_craftring("greek:marble_tile_%s", tile_total)
minetest.register_craft({
output = "greek:marble_tile_1 4",
recipe = {
{"greek:marble_polished_block", "greek:marble_polished_block"},
{"greek:marble_polished_block", "greek:marble_polished_block"},
}
})
-- Painted marble tiles
-- type name = {total, list of recipe shapes}
local types = {
center = {12, {{
{0, 1, 0},
{1, 1, 1},
{0, 1, 0},
}}},
corner = {12, {
{{1, 0, 0}, {1, 0, 0}, {1, 1, 1}},
{{0, 0, 1}, {0, 0, 1}, {1, 1, 1}},
{{1, 1, 1}, {0, 0, 1}, {0, 0, 1}},
{{1, 1, 1}, {1, 0, 0}, {1, 0, 0}}
}},
edge = {12, {{
{1, 0, 1},
{0, 1, 0},
{1, 0, 1},
}}}
}
-- Palette colors and corresponding dyes
local palette = {[0] = "#0058af", "#ffdf7e", "#040404", "#fd294d", "#fa8a2d", "#067f23", "#8f54f5", "#f39ae4"}
local dyes = {["dye:blue"] = 0, ["dye:yellow"] = 1, ["dye:black"] = 2, ["dye:red"] = 3, ["dye:orange"] = 4, ["dye:green"] = 5, ["dye:violet"] = 6, ["dye:pink"] = 7}
local dye_punch = function(pos, node, puncher, pointed)
if not minetest.is_protected(pos, puncher:get_player_name()) then
local stack = puncher:get_wielded_item():get_name()
if dyes[stack] then
minetest.swap_node(pos, {name = node.name, param2 = (dyes[stack] * 32) + (node.param2 % 32)})
end
end
return minetest.node_punch(pos, node, puncher, pointed)
end
for type, data in pairs(types) do
local total = data[1]
for i = 1, total do
local name = ("greek:marble_painted_%s_%s"):format(type, i)
local tile = ("greek_marble_painted_%s_%s.png"):format(type, i)
greek.register_node_and_stairs(name, {
description = ("Painted %s Marble %s"):format(type:gsub("^%l", string.upper), i),
tiles = {{name = "greek_marble_polished.png", color = "white"}},
overlay_tiles = {tile, tile .. "^[transformFX", tile, tile .. "^[transformFY", tile .. "^[transformFX", tile .. "^[transformR180"},
paramtype2 = "colorfacedir",
palette = "greek_marble_painted_palette.png",
color = palette[0], -- This is used for inventory color
use_texture_alpha = true,
groups = greek.marble_groups,
sounds = greek.marble_sounds,
on_punch = dye_punch,
})
for dye, color in pairs(dyes) do
minetest.register_craft({
output = minetest.itemstring_with_color(name, palette[color]),
recipe = {name, dye},
replacements = {{dye, dye}},
type = "shapeless",
})
end
end
greek.register_craftring("greek:marble_painted_" .. type .. "_%s", total)
-- Fill recipe template with items
local items = {[0] = "greek:marble_polished", "group:dye"}
for _, recipe in pairs(data[2]) do
local filled = {}
for row in pairs(recipe) do
filled[row] = {}
for col in pairs(recipe[row]) do
filled[row][col] = items[recipe[row][col]]
end
end
minetest.register_craft({
output = ("greek:marble_painted_%s_1 4"):format(type),
recipe = filled,
})
end
end

View File

@ -1,4 +1,3 @@
name = greeknodes
description = Some Greek architecture
depends = default, stairs
optional_depends = building_blocks
name = greek
description = A large assortment of Greek architecture blocks and materials.
optional_depends = stairs

BIN
models/greek.blend Normal file

Binary file not shown.

25
models/greek_chain.obj Normal file
View File

@ -0,0 +1,25 @@
# Blender v2.92.0 OBJ File: 'greek.blend'
# www.blender.org
o chain_Plane.001
v -0.500000 -0.500000 -0.000000
v 0.500000 -0.500000 -0.000000
v -0.500000 0.500000 0.000000
v 0.500000 0.500000 0.000000
v 0.000000 -0.500000 0.500000
v 0.000000 -0.500000 -0.500000
v 0.000000 0.500000 0.500000
v 0.000000 0.500000 -0.500000
vt -0.000000 -0.093750
vt 1.000000 -0.093750
vt 1.000000 0.906250
vt -0.000000 0.906250
vt -0.000000 0.031250
vt 1.000000 0.031250
vt 1.000000 1.031250
vt -0.000000 1.031250
vn 0.0000 -0.0000 1.0000
vn 1.0000 0.0000 0.0000
g chain_Plane.001_greek_chain.png
s off
f 1/1/1 2/2/1 4/3/1 3/4/1
f 5/5/2 6/6/2 8/7/2 7/8/2

49
models/greek_door.obj Normal file
View File

@ -0,0 +1,49 @@
# Blender v2.92.0 OBJ File: 'greek.blend'
# www.blender.org
o door_Cube.007
v -0.500000 -0.500000 -0.375000
v -0.500000 1.500000 -0.375000
v -0.500000 -0.500000 -0.500000
v -0.500000 1.500000 -0.500000
v 0.500000 -0.500000 -0.375000
v 0.500000 1.500000 -0.375000
v 0.500000 -0.500000 -0.500000
v 0.500000 1.500000 -0.500000
vt 0.894737 0.000000
vt 0.894737 1.000000
vt 0.947368 1.000000
vt 0.947368 0.000000
vt 0.000000 0.000000
vt 0.000000 1.000000
vt 0.421053 1.000000
vt 0.421053 0.000000
vt 0.842105 0.000000
vt 0.842105 1.000000
vt 0.894737 1.000000
vt 0.894737 0.000000
vt 0.421053 0.000000
vt 0.421053 1.000000
vt 0.842105 1.000000
vt 0.842105 0.000000
vt 0.947368 0.500000
vt 0.947368 1.000000
vt 1.000000 1.000000
vt 1.000000 0.500000
vt 1.000000 0.500000
vt 1.000000 0.000000
vt 0.947368 0.000000
vt 0.947368 0.500000
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
g door_Cube.007_greek_door
s off
f 1/1/1 2/2/1 4/3/1 3/4/1
f 3/5/2 4/6/2 8/7/2 7/8/2
f 7/9/3 8/10/3 6/11/3 5/12/3
f 5/13/4 6/14/4 2/15/4 1/16/4
f 3/17/5 7/18/5 5/19/5 1/20/5
f 8/21/6 4/22/6 2/23/6 6/24/6

101
models/greek_fire_bowl.obj Normal file
View File

@ -0,0 +1,101 @@
# Blender v2.92.0 OBJ File: 'greek.blend'
# www.blender.org
o fire_bowl_Cube.003
v -0.250000 -0.496094 0.250000
v -0.500000 -0.246094 0.500000
v -0.250000 -0.496094 -0.250000
v -0.500000 -0.246094 -0.500000
v 0.250000 -0.496094 0.250000
v 0.500000 -0.246094 0.500000
v 0.250000 -0.496094 -0.250000
v 0.500000 -0.246094 -0.500000
v -0.176777 0.191406 0.176777
v -0.176777 -0.308594 0.176777
v 0.176777 0.191406 -0.176777
v 0.176777 -0.308594 -0.176777
v -0.176777 -0.308594 -0.176777
v 0.176777 -0.308594 0.176777
v -0.176777 0.191406 -0.176777
v 0.176777 0.191406 0.176777
v 0.144088 0.187608 -0.250000
v 0.144088 0.187608 0.250000
v 0.230912 -0.304796 -0.250000
v 0.230912 -0.304796 0.250000
v -0.144088 0.187608 0.250000
v -0.144088 0.187608 -0.250000
v -0.230912 -0.304796 0.250000
v -0.230912 -0.304796 -0.250000
v 0.250000 -0.304796 -0.230912
v -0.250000 -0.304796 -0.230912
v 0.250000 0.187608 -0.144088
v -0.250000 0.187608 -0.144088
v -0.250000 -0.304796 0.230912
v 0.250000 -0.304796 0.230912
v -0.250000 0.187608 0.144088
v 0.250000 0.187608 0.144088
v -0.437500 -0.308594 0.437500
v -0.437500 -0.308594 -0.437500
v 0.437500 -0.308594 0.437500
v 0.437500 -0.308594 -0.437500
vt 0.133333 0.250000
vt -0.000000 0.000000
vt -0.000000 1.000000
vt 0.133333 0.750000
vt 0.533333 1.000000
vt 0.400000 0.750000
vt 0.533333 0.000000
vt 0.400000 0.250000
vt 1.000000 1.000000
vt 0.533333 1.000000
vt 0.533333 0.125000
vt 1.000000 0.125000
vt 0.000100 0.000100
vt 0.999900 0.000100
vt 0.999900 0.999900
vt 0.000100 0.999900
vt 0.999900 0.000100
vt 0.999900 0.999900
vt 0.000100 0.999900
vt 0.000100 0.000100
vt 0.000100 0.999900
vt 0.000100 0.000100
vt 0.999900 0.000100
vt 0.999900 0.999900
vt 0.000100 0.999900
vt 0.000100 0.000100
vt 0.999900 0.000100
vt 0.999900 0.999900
vt 0.999900 0.000100
vt 0.999900 0.999900
vt 0.000100 0.999900
vt 0.000100 0.000100
vt 0.999900 0.000100
vt 0.999900 0.999900
vt 0.000100 0.999900
vt 0.000100 0.000100
vn -0.7071 -0.7071 0.0000
vn 0.0000 -0.7071 -0.7071
vn 0.7071 -0.7071 0.0000
vn 0.0000 -0.7071 0.7071
vn 0.0000 -1.0000 0.0000
vn 0.7071 0.0000 0.7071
vn -0.7071 -0.0000 0.7071
vn 0.9848 0.1736 0.0000
vn -0.9848 0.1736 -0.0000
vn 0.0000 0.1736 -0.9848
vn -0.0000 0.1736 0.9848
g fire_bowl_Cube.003_greek_fire_bowl.png
s off
f 1/1/1 2/2/1 4/3/1 3/4/1
f 3/4/2 4/3/2 8/5/2 7/6/2
f 7/6/3 8/5/3 6/7/3 5/8/3
f 5/8/4 6/7/4 2/2/4 1/1/4
f 3/4/5 7/6/5 5/8/5 1/1/5
f 34/9/5 36/10/5 35/11/5 33/12/5
g fire_bowl_Cube.003_fire_basic_flame_animated.png
f 10/13/6 12/14/6 11/15/6 9/16/6
f 14/17/7 16/18/7 15/19/7 13/20/7
f 18/21/8 20/22/8 19/23/8 17/24/8
f 22/25/9 24/26/9 23/27/9 21/28/9
f 26/29/10 28/30/10 27/31/10 25/32/10
f 30/33/11 32/34/11 31/35/11 29/36/11

View File

@ -0,0 +1,162 @@
# Blender v2.92.0 OBJ File: 'greek.blend'
# www.blender.org
o fire_bowl_hanging_Cube.009
v -0.250000 -1.496094 0.250000
v -0.500000 -1.246094 0.500000
v -0.250000 -1.496094 -0.250000
v -0.500000 -1.246094 -0.500000
v 0.250000 -1.496094 0.250000
v 0.500000 -1.246094 0.500000
v 0.250000 -1.496094 -0.250000
v 0.500000 -1.246094 -0.500000
v -0.176777 -0.808594 0.176777
v -0.176777 -1.308594 0.176777
v 0.176777 -0.808594 -0.176777
v 0.176777 -1.308594 -0.176777
v -0.176777 -1.308594 -0.176777
v 0.176777 -1.308594 0.176777
v -0.176777 -0.808594 -0.176777
v 0.176777 -0.808594 0.176777
v 0.144088 -0.812392 -0.250000
v 0.144088 -0.812392 0.250000
v 0.230912 -1.304796 -0.250000
v 0.230912 -1.304796 0.250000
v -0.144088 -0.812392 0.250000
v -0.144088 -0.812392 -0.250000
v -0.230912 -1.304796 0.250000
v -0.230912 -1.304796 -0.250000
v 0.250000 -1.304796 -0.230912
v -0.250000 -1.304796 -0.230912
v 0.250000 -0.812392 -0.144088
v -0.250000 -0.812392 -0.144088
v -0.250000 -1.304796 0.230912
v 0.250000 -1.304796 0.230912
v -0.250000 -0.812392 0.144088
v 0.250000 -0.812392 0.144088
v -0.437500 -1.308594 0.437500
v -0.437500 -1.308594 -0.437500
v 0.437500 -1.308594 0.437500
v 0.437500 -1.308594 -0.437500
v -0.982963 -1.120590 -0.000000
v -0.017037 -1.379410 -0.000000
v -0.513853 0.630150 0.000000
v 0.452072 0.371331 -0.000000
v -0.500000 -1.250000 0.500000
v -0.500000 -1.250000 -0.500000
v -0.030890 0.500741 0.500000
v -0.030890 0.500741 -0.500000
v 0.695060 -1.120590 0.695060
v 0.012047 -1.379410 0.012047
v 0.363349 0.630150 0.363349
v -0.319663 0.371331 -0.319663
v 0.707107 -1.250000 0.000000
v 0.000000 -1.250000 0.707107
v 0.375396 0.500741 -0.331711
v -0.331710 0.500741 0.375396
v 0.695060 -1.120590 -0.695060
v 0.012047 -1.379410 -0.012047
v 0.363349 0.630150 -0.363349
v -0.319663 0.371331 0.319663
v 0.000000 -1.250000 -0.707107
v 0.707107 -1.250000 -0.000000
v -0.331711 0.500741 -0.375396
v 0.375396 0.500741 0.331710
vt 0.133333 0.250000
vt -0.000000 0.000000
vt -0.000000 1.000000
vt 0.133333 0.750000
vt 0.533333 1.000000
vt 0.400000 0.750000
vt 0.533333 0.000000
vt 0.400000 0.250000
vt 1.000000 1.000000
vt 0.533333 1.000000
vt 0.533333 0.125000
vt 1.000000 0.125000
vt 0.000100 0.000100
vt 0.999900 0.000100
vt 0.999900 0.999900
vt 0.000100 0.999900
vt 0.999900 0.000100
vt 0.999900 0.999900
vt 0.000100 0.999900
vt 0.000100 0.000100
vt 0.000100 0.999900
vt 0.000100 0.000100
vt 0.999900 0.000100
vt 0.999900 0.999900
vt 0.000100 0.999900
vt 0.000100 0.000100
vt 0.999900 0.000100
vt 0.999900 0.999900
vt 0.999900 0.000100
vt 0.999900 0.999900
vt 0.000100 0.999900
vt 0.000100 0.000100
vt 0.999900 0.000100
vt 0.999900 0.999900
vt 0.000100 0.999900
vt 0.000100 0.000100
vt -0.000000 -0.500000
vt 1.000000 -0.500000
vt 1.000000 1.312500
vt -0.000000 1.312500
vt -0.000000 -0.375000
vt 1.000000 -0.375000
vt 1.000000 1.437500
vt -0.000000 1.437500
vt -0.000000 -0.500000
vt 1.000000 -0.500000
vt 1.000000 1.312500
vt -0.000000 1.312500
vt -0.000000 -0.375000
vt 1.000000 -0.375000
vt 1.000000 1.437500
vt -0.000000 1.437500
vt -0.000000 -0.500000
vt 1.000000 -0.500000
vt 1.000000 1.312500
vt -0.000000 1.312500
vt -0.000000 -0.375000
vt 1.000000 -0.375000
vt 1.000000 1.437500
vt -0.000000 1.437500
vn -0.7071 -0.7071 0.0000
vn 0.0000 -0.7071 -0.7071
vn 0.7071 -0.7071 0.0000
vn 0.0000 -0.7071 0.7071
vn 0.0000 -1.0000 0.0000
vn 0.7071 0.0000 0.7071
vn -0.7071 -0.0000 0.7071
vn 0.9848 0.1736 0.0000
vn -0.9848 0.1736 -0.0000
vn 0.0000 0.1736 -0.9848
vn -0.0000 0.1736 0.9848
vn 0.0000 -0.0000 1.0000
vn 0.9659 -0.2588 -0.0000
vn 0.7071 -0.0000 -0.7071
vn -0.6830 -0.2588 -0.6830
vn -0.7071 -0.0000 -0.7071
vn -0.6830 -0.2588 0.6830
g fire_bowl_hanging_Cube.009_greek_fire_bowl.png
s off
f 1/1/1 2/2/1 4/3/1 3/4/1
f 3/4/2 4/3/2 8/5/2 7/6/2
f 7/6/3 8/5/3 6/7/3 5/8/3
f 5/8/4 6/7/4 2/2/4 1/1/4
f 3/4/5 7/6/5 5/8/5 1/1/5
f 34/9/5 36/10/5 35/11/5 33/12/5
g fire_bowl_hanging_Cube.009_fire_basic_flame_animated.png
f 10/13/6 12/14/6 11/15/6 9/16/6
f 14/17/7 16/18/7 15/19/7 13/20/7
f 18/21/8 20/22/8 19/23/8 17/24/8
f 22/25/9 24/26/9 23/27/9 21/28/9
f 26/29/10 28/30/10 27/31/10 25/32/10
f 30/33/11 32/34/11 31/35/11 29/36/11
g fire_bowl_hanging_Cube.009_greek_chain.png
f 37/37/12 38/38/12 40/39/12 39/40/12
f 41/41/13 42/42/13 44/43/13 43/44/13
f 45/45/14 46/46/14 48/47/14 47/48/14
f 49/49/15 50/50/15 52/51/15 51/52/15
f 53/53/16 54/54/16 56/55/16 55/56/16
f 57/57/17 58/58/17 60/59/17 59/60/17

109
models/greek_lamp.obj Normal file
View File

@ -0,0 +1,109 @@
# Blender v2.92.0 OBJ File: 'greek.blend'
# www.blender.org
o lamp_Cube.004
v -0.187500 -0.500000 0.187500
v -0.187500 -0.375000 0.187500
v -0.187500 -0.500000 -0.187500
v -0.187500 -0.375000 -0.187500
v 0.187500 -0.500000 0.187500
v 0.187500 -0.375000 0.187500
v 0.187500 -0.500000 -0.187500
v 0.187500 -0.375000 -0.187500
v 0.187500 -0.437500 0.125000
v 0.187500 -0.375000 0.125000
v 0.187500 -0.437500 -0.125000
v 0.187500 -0.375000 -0.125000
v 0.312500 -0.437500 0.125000
v 0.312500 -0.375000 0.125000
v 0.312500 -0.437500 -0.125000
v 0.312500 -0.375000 -0.125000
v -0.312500 -0.437500 0.062500
v -0.312500 -0.312500 0.062500
v -0.312500 -0.437500 -0.062500
v -0.312500 -0.312500 -0.062500
v -0.187500 -0.437500 0.062500
v -0.187500 -0.312500 0.062500
v -0.187500 -0.437500 -0.062500
v -0.187500 -0.312500 -0.062500
v 0.231694 -0.375000 0.044194
v 0.231694 -0.250000 0.044194
v 0.143306 -0.375000 -0.044194
v 0.143306 -0.250000 -0.044194
v 0.231694 -0.375000 -0.044194
v 0.231694 -0.250000 -0.044194
v 0.143306 -0.375000 0.044194
v 0.143306 -0.250000 0.044194
vt 0.000000 0.500000
vt 0.125000 0.500000
vt 0.125000 0.875000
vt 0.000000 0.875000
vt 0.125000 1.000000
vt 0.500000 0.875000
vt 0.500000 1.000000
vt 0.625000 0.875000
vt 0.500000 0.500000
vt 0.625000 0.500000
vt 0.500000 0.375000
vt 0.125000 0.375000
vt 0.125000 -0.000000
vt 0.500000 -0.000000
vt 0.500000 0.375000
vt 0.500000 0.312500
vt 0.625000 0.312500
vt 0.625000 0.375000
vt 0.687500 0.312500
vt 0.625000 0.062500
vt 0.687500 0.062500
vt 0.625000 0.000000
vt 0.500000 0.062500
vt 0.500000 0.000000
vt 0.750000 0.562500
vt 0.625000 0.562500
vt 0.625000 0.312500
vt 0.750000 0.312500
vt -0.000000 0.375000
vt -0.000000 0.250000
vt 0.125000 0.250000
vt 0.125000 0.375000
vt 0.125000 0.000000
vt 0.125000 0.125000
vt -0.000000 0.125000
vt -0.000000 0.000000
vt 0.125000 0.500000
vt -0.000000 0.500000
vt 0.750000 0.000000
vt 0.750000 1.000000
vt 1.000000 1.000000
vt 1.000000 0.000000
vt 0.750000 0.000000
vt 0.750000 1.000000
vt 1.000000 1.000000
vt 1.000000 0.000000
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 0.7071 0.0000 -0.7071
vn -0.7071 0.0000 -0.7071
g lamp_Cube.004_greek_lamp.png
s off
f 1/1/1 2/2/1 4/3/1 3/4/1
f 3/5/2 4/3/2 8/6/2 7/7/2
f 7/8/3 8/6/3 6/9/3 5/10/3
f 5/11/4 6/9/4 2/2/4 1/12/4
f 3/13/5 7/14/5 5/11/5 1/12/5
f 8/6/6 4/3/6 2/2/6 6/9/6
f 11/15/2 12/16/2 16/17/2 15/18/2
f 15/19/3 16/17/3 14/20/3 13/21/3
f 13/22/4 14/20/4 10/23/4 9/24/4
f 11/25/5 15/26/5 13/27/5 9/28/5
f 16/17/6 12/16/6 10/23/6 14/20/6
f 17/29/1 18/30/1 20/31/1 19/32/1
f 23/33/3 24/34/3 22/35/3 21/36/3
f 19/32/5 23/37/5 21/38/5 17/29/5
f 24/34/6 20/31/6 18/30/6 22/35/6
g lamp_Cube.004_greek_lamp.png_flame
f 27/39/7 28/40/7 26/41/7 25/42/7
f 31/43/8 32/44/8 30/45/8 29/46/8

126
models/greek_shutters.obj Normal file
View File

@ -0,0 +1,126 @@
# Blender v2.92.0 OBJ File: 'greek.blend'
# www.blender.org
o shutters_Cube.008
v -0.500000 -0.500000 0.500000
v -0.500000 0.500000 0.500000
v -0.500000 -0.500000 0.375000
v -0.500000 0.500000 0.375000
v 0.500000 -0.500000 0.500000
v 0.500000 0.500000 0.500000
v 0.500000 -0.500000 0.375000
v 0.500000 0.500000 0.375000
v -0.500000 -0.500000 0.375000
v -0.500000 0.500000 0.375000
v -0.500000 -0.500000 0.500000
v -0.500000 0.500000 0.500000
v 0.500000 -0.500000 0.375000
v 0.500000 0.500000 0.375000
v 0.500000 -0.500000 0.500000
v 0.500000 0.500000 0.500000
v -1.000000 -0.500000 0.500000
v -1.000000 0.500000 0.500000
v 1.000000 -0.500000 0.375000
v 1.000000 0.500000 0.375000
v 1.000000 0.500000 0.500000
v -1.000000 0.500000 0.375000
v 1.000000 -0.500000 0.500000
v -1.000000 -0.500000 0.375000
vt 1.000000 -0.000000
vt 1.000000 1.000000
vt 0.888889 1.000000
vt 0.888889 -0.000000
vt 0.888889 1.000000
vt 0.888889 -0.000000
vt 1.000000 -0.000000
vt 1.000000 1.000000
vt 0.888816 0.000094
vt 0.888816 0.999906
vt 0.000094 0.999906
vt 0.000094 0.000094
vt 0.888889 0.000000
vt 0.888889 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 0.888889 1.000000
vt 0.888889 -0.000000
vt 1.000000 -0.000000
vt 1.000000 1.000000
vt 0.888889 1.000000
vt 0.888889 -0.000000
vt 1.000000 -0.000000
vt 1.000000 1.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.888889 1.000000
vt 0.888889 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.888889 1.000000
vt 0.888889 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.888889 1.000000
vt 0.888889 0.000000
vt 0.888889 1.000000
vt 0.888889 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.444455 0.000094
vt 0.444455 0.999906
vt 0.000094 0.999906
vt 0.000094 0.000094
vt 0.444444 0.000000
vt 0.444444 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 0.888889 0.500000
vt 0.888889 -0.000000
vt 1.000000 -0.000000
vt 1.000000 0.500000
vt 0.888889 0.500000
vt 0.888889 -0.000000
vt 1.000000 -0.000000
vt 1.000000 0.500000
vt 0.888889 1.000000
vt 0.888889 0.500000
vt 1.000000 0.500000
vt 1.000000 1.000000
vt 0.888889 1.000000
vt 0.888889 0.500000
vt 1.000000 0.500000
vt 1.000000 1.000000
vt 0.888889 0.000000
vt 0.888889 1.000000
vt 0.444444 1.000000
vt 0.444444 0.000000
vt 0.888816 0.000094
vt 0.888816 0.999906
vt 0.444455 0.999906
vt 0.444455 0.000094
vn -1.0000 0.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
g shutters_Cube.008_greek_shutters_closed
s off
f 1/1/1 2/2/1 4/3/1 3/4/1
f 7/5/2 8/6/2 6/7/2 5/8/2
f 3/9/3 4/10/3 8/11/3 7/12/3
f 5/13/4 6/14/4 2/15/4 1/16/4
f 3/17/5 7/18/5 5/19/5 1/20/5
f 8/21/6 4/22/6 2/23/6 6/24/6
g shutters_Cube.008_greek_shutters_open
f 22/25/1 24/26/1 17/27/1 18/28/1
f 19/29/2 20/30/2 21/31/2 23/32/2
f 9/33/2 10/34/2 12/35/2 11/36/2
f 15/37/1 16/38/1 14/39/1 13/40/1
f 23/41/4 21/42/4 16/43/4 15/44/4
f 24/45/3 22/46/3 10/47/3 9/48/3
f 23/49/5 15/50/5 13/51/5 19/52/5
f 18/53/6 12/54/6 10/55/6 22/56/6
f 16/57/6 21/58/6 20/59/6 14/60/6
f 11/61/5 17/62/5 24/63/5 9/64/5
f 13/65/3 14/66/3 20/67/3 19/68/3
f 11/69/4 12/70/4 18/71/4 17/72/4

View File

@ -0,0 +1,138 @@
# Blender v2.92.0 OBJ File: 'greek.blend'
# www.blender.org
o vase_amphora_Cube.005
v -0.125000 -0.500000 0.125000
v -0.250000 0.000000 0.250000
v -0.125000 -0.500000 -0.125000
v -0.250000 0.000000 -0.250000
v 0.125000 -0.500000 0.125000
v 0.250000 0.000000 0.250000
v 0.125000 -0.500000 -0.125000
v 0.250000 0.000000 -0.250000
v -0.125000 0.250000 0.125000
v -0.125000 0.500000 0.125000
v -0.125000 0.250000 -0.125000
v -0.125000 0.500000 -0.125000
v 0.125000 0.250000 0.125000
v 0.125000 0.500000 0.125000
v 0.125000 0.250000 -0.125000
v 0.125000 0.500000 -0.125000
v -0.187500 0.500000 0.187500
v 0.187500 0.500000 0.187500
v -0.187500 0.500000 -0.187500
v 0.187500 0.500000 -0.187500
v -0.250000 0.437500 0.062500
v 0.250000 0.437500 0.062500
v -0.250000 0.437500 -0.062500
v 0.250000 0.437500 -0.062500
v -0.250000 0.250000 0.062500
v 0.250000 0.250000 0.062500
v -0.250000 0.250000 -0.062500
v 0.250000 0.250000 -0.062500
v -0.250000 0.250000 0.250000
v -0.250000 0.250000 -0.250000
v 0.250000 0.250000 -0.250000
v 0.250000 0.250000 0.250000
v -0.125000 0.437500 0.062500
v -0.125000 0.437500 -0.062500
v 0.125000 0.437500 0.062500
v 0.125000 0.437500 -0.062500
vt 0.375000 -0.000000
vt 0.500000 0.500000
vt -0.000000 0.500000
vt 0.125000 -0.000000
vt 0.375000 -0.000000
vt 0.500000 0.500000
vt -0.000000 0.500000
vt 0.125000 -0.000000
vt 0.375000 -0.000000
vt 0.500000 0.500000
vt -0.000000 0.500000
vt 0.125000 -0.000000
vt 0.375000 -0.000000
vt 0.500000 0.500000
vt 0.000000 0.500000
vt 0.125000 -0.000000
vt 0.375000 0.750000
vt 0.625000 0.750000
vt 0.625000 1.000000
vt 0.375000 1.000000
vt 0.500000 0.750000
vt -0.000000 0.750000
vt 0.375000 0.750000
vt 0.375000 1.000000
vt 0.125000 1.000000
vt 0.125000 0.750000
vt 0.375000 0.750000
vt 0.375000 1.000000
vt 0.125000 1.000000
vt 0.125000 0.750000
vt 0.375000 0.750000
vt 0.375000 1.000000
vt 0.125000 1.000000
vt 0.125000 0.750000
vt 0.375000 0.750000
vt 0.375000 1.000000
vt 0.125000 1.000000
vt 0.125000 0.750000
vt 0.625000 0.500000
vt 1.000000 0.500000
vt 1.000000 0.875000
vt 0.625000 0.875000
vt 0.625000 0.875000
vt 0.750000 0.875000
vt 0.750000 1.000000
vt 0.625000 1.000000
vt 0.625000 0.750000
vt 0.500000 0.750000
vt 0.500000 0.562500
vt 0.625000 0.562500
vt 0.125000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.812500
vt 0.125000 0.812500
vt 0.500000 0.000000
vt 1.000000 0.000000
vt 1.000000 0.500000
vt 0.500000 0.500000
vt 0.500000 0.750000
vt -0.000000 0.750000
vt 0.500000 0.750000
vt 0.000000 0.750000
vt 0.500000 0.750000
vt -0.000000 0.750000
vt 0.875000 0.875000
vt 1.000000 0.875000
vt 1.000000 1.000000
vt 0.875000 1.000000
vn -0.9701 -0.2425 0.0000
vn 0.0000 -0.2425 -0.9701
vn 0.9701 -0.2425 0.0000
vn 0.0000 -0.2425 0.9701
vn 0.0000 -1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 1.0000 0.0000
g vase_amphora_Cube.005_greek_vase_amphra
s off
f 1/1/1 2/2/1 4/3/1 3/4/1
f 3/5/2 4/6/2 8/7/2 7/8/2
f 7/9/3 8/10/3 6/11/3 5/12/3
f 5/13/4 6/14/4 2/15/4 1/16/4
f 3/17/5 7/18/5 5/19/5 1/20/5
f 6/11/6 8/10/6 31/21/6 32/22/6
f 9/23/7 10/24/7 12/25/7 11/26/7
f 11/27/8 12/28/8 16/29/8 15/30/8
f 15/31/6 16/32/6 14/33/6 13/34/6
f 13/35/9 14/36/9 10/37/9 9/38/9
f 17/39/10 18/40/10 20/41/10 19/42/10
f 23/43/10 21/44/10 33/45/10 34/46/10
f 24/47/6 22/48/6 26/49/6 28/50/6
f 21/51/7 23/52/7 27/53/7 25/54/7
f 31/55/10 30/56/10 29/57/10 32/58/10
f 4/3/7 2/2/7 29/59/7 30/60/7
f 2/15/9 6/14/9 32/61/9 29/62/9
f 8/7/8 4/6/8 30/63/8 31/64/8
f 22/65/10 24/66/10 36/67/10 35/68/10

View File

@ -0,0 +1,123 @@
# Blender v2.92.0 OBJ File: 'greek.blend'
# www.blender.org
o vase_stamnos_Cube.006
v -0.187500 -0.500000 0.187500
v -0.312500 -0.250000 0.312500
v -0.187500 -0.500000 -0.187500
v -0.312500 -0.250000 -0.312500
v 0.187500 -0.500000 0.187500
v 0.312500 -0.250000 0.312500
v 0.187500 -0.500000 -0.187500
v 0.312500 -0.250000 -0.312500
v 0.187500 0.000000 0.187500
v 0.187500 0.000000 -0.187500
v -0.187500 0.000000 -0.187500
v -0.187500 0.000000 0.187500
v -0.250000 0.062500 0.250000
v 0.250000 0.062500 0.250000
v -0.250000 0.062500 -0.250000
v 0.250000 0.062500 -0.250000
v -0.312500 -0.062500 0.312500
v -0.312500 -0.062500 -0.312500
v 0.312500 -0.062500 -0.312500
v 0.312500 -0.062500 0.312500
v 0.187500 0.062500 0.187500
v 0.187500 0.062500 -0.187500
v -0.187500 0.062500 -0.187500
v -0.187500 0.062500 0.187500
v 0.312500 -0.125000 0.062500
v 0.375000 -0.125000 0.062500
v 0.312500 -0.125000 -0.062500
v 0.375000 -0.125000 -0.062500
v -0.375000 -0.125000 0.062500
v -0.312500 -0.125000 0.062500
v -0.375000 -0.125000 -0.062500
v -0.312500 -0.125000 -0.062500
vt 0.875000 0.000000
vt 1.000000 0.250000
vt 0.375000 0.250000
vt 0.500000 0.000000
vt 0.875000 0.000000
vt 1.000000 0.250000
vt 0.375000 0.250000
vt 0.500000 0.000000
vt 0.875000 0.000000
vt 1.000000 0.250000
vt 0.375000 0.250000
vt 0.500000 0.000000
vt 0.875000 0.000000
vt 1.000000 0.250000
vt 0.375000 0.250000
vt 0.500000 0.000000
vt 0.000000 0.000000
vt 0.375000 0.000000
vt 0.375000 0.375000
vt 0.000000 0.375000
vt 1.000000 0.437500
vt 0.375000 0.437500
vt 0.875000 0.500000
vt 0.500000 0.500000
vt 0.500000 0.562500
vt 0.875000 0.562500
vt -0.000000 0.500000
vt 0.500000 0.500000
vt 0.500000 1.000000
vt -0.000000 1.000000
vt 0.375000 0.437500
vt 1.000000 0.437500
vt 0.875000 0.500000
vt 0.500000 0.500000
vt 0.375000 0.437500
vt 1.000000 0.437500
vt 0.875000 0.500000
vt 0.500000 0.500000
vt 0.500000 0.500000
vt 1.000000 0.437500
vt 0.375000 0.437500
vt 0.875000 0.500000
vt 0.875000 0.562500
vt 0.500000 0.562500
vt 0.562500 1.000000
vt 0.500000 1.000000
vt 0.500000 0.875000
vt 0.562500 0.875000
vt 0.687500 1.000000
vt 0.625000 1.000000
vt 0.625000 0.875000
vt 0.687500 0.875000
vn -0.8944 -0.4472 0.0000
vn 0.0000 -0.4472 -0.8944
vn 0.8944 -0.4472 0.0000
vn 0.0000 -0.4472 0.8944
vn 0.0000 -1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 0.0000 1.0000 0.0000
vn 0.0000 0.8944 -0.4472
vn 0.0000 0.8944 0.4472
vn 0.4472 0.8944 0.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn -0.4472 0.8944 0.0000
g vase_stamnos_Cube.006_greek_vase_stamnos
s off
f 1/1/1 2/2/1 4/3/1 3/4/1
f 3/5/2 4/6/2 8/7/2 7/8/2
f 7/9/3 8/10/3 6/11/3 5/12/3
f 5/13/4 6/14/4 2/15/4 1/16/4
f 3/17/5 7/18/5 5/19/5 1/20/5
f 6/11/6 8/10/6 19/21/6 20/22/6
f 10/23/7 11/24/7 23/25/7 22/26/7
f 13/27/8 14/28/8 16/29/8 15/30/8
f 19/31/9 18/32/9 11/33/9 10/34/9
f 17/35/10 20/36/10 9/37/10 12/38/10
f 20/22/11 19/21/11 10/23/11 9/39/11
f 4/3/12 2/2/12 17/40/12 18/41/12
f 2/15/13 6/14/13 20/36/13 17/35/13
f 8/7/7 4/6/7 18/32/7 19/31/7
f 18/41/14 17/40/14 12/42/14 11/24/14
f 11/24/12 12/42/12 24/43/12 23/25/12
f 9/39/6 10/23/6 22/26/6 21/44/6
f 12/42/13 9/39/13 21/44/13 24/43/13
f 25/45/8 26/46/8 28/47/8 27/48/8
f 29/49/8 30/50/8 32/51/8 31/52/8

BIN
screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

40
settingtypes.txt Normal file
View File

@ -0,0 +1,40 @@
# Comma-separated list of items that can be used as marble.
# Order this list by priority (descending) for greeknodes marble aliasing.
greek.marble (Marble item list) string building_blocks:Marble,darkage:marble,technic:marble
# Comma-separated list of items that can be used as limestone for cement-making.
greek.limestone (Limestone item list) string default:silver_sandstone,darkage:chalk
# Comma-separated list of items that can be used as gold blocks for gilded gold.
greek.gold_block (Gold Block item list) string default:goldblock
# Comma-separated list of items that can be used as red clay.
# Removing greek:red_clay will prevent it from being registered.
greek.red_clay (Red Clay item list) string greek:red_clay
# Comma-separated list of items that can be used as clay lumps.
# This setting is ignored if greek:red_clay is removed from the red clay item list.
greek.clay_lump (Clay Lump item list) string default:clay_lump
# Comma-separated list of items that can be used in place of blue wood.
# Removing greek:blue_wood will prevent it from being registered.
greek.blue_wood (Blue Wood item list) string greek:blue_wood
# Comma-separated list of items that can be used as door locks.
# Will be used to craft locked doors.
greek.door_lock (Door lock item list) string default:steel_ingot,basic_materials:padlock
# Maximum amount of items vases can hold.
greek.vase_max (Maximum Vase capacity) int 10
# Determines whether the fire bowl will drop a lit or unlit version.
greek.fire_bowl_dig_snuff (Snuff Fire Bowl on dig) bool false
# Enables compatibility with legacy greeknodes mod.
# Marble will be aliased to the first valid node found in the greek.marble setting.
greek.greeknodes_aliases (Register greeknodes aliases) bool true
# Convert greeknodes:marble to greek:marble_polished instead of marble from another mod.
greek.alias_polished_marble (Alias old marble to polished marble) bool false
# TODO: Configurable sounds

187
stairs.lua Normal file
View File

@ -0,0 +1,187 @@
-- Mostly-custom stair implementation because I don't want to depend on other mods for content and
-- the default stairs implementation doesn't allow callbacks or return registered itemnames.
-- Rotation functions taken from minetest_game/stairs 2021/04/21
local function rotate_and_place(itemstack, placer, pointed_thing)
local p0 = pointed_thing.under
local p1 = pointed_thing.above
local param2 = 0
if placer then
local placer_pos = placer:get_pos()
if placer_pos then
param2 = minetest.dir_to_facedir(vector.subtract(p1, placer_pos))
end
local finepos = minetest.pointed_thing_to_face_pos(placer, pointed_thing)
local fpos = finepos.y % 1
if p0.y - 1 == p1.y or (fpos > 0 and fpos < 0.5)
or (fpos < -0.5 and fpos > -0.999999999) then
param2 = param2 + 20
if param2 == 21 then
param2 = 23
elseif param2 == 23 then
param2 = 21
end
end
end
return minetest.item_place(itemstack, placer, pointed_thing, param2)
end
local function slab_place(itemstack, placer, pointed_thing)
local under = minetest.get_node(pointed_thing.under)
local wield_item = itemstack:get_name()
local player_name = placer and placer:get_player_name() or ""
if under and under.name:find("^stairs:slab_") then
-- place slab using under node orientation
local dir = minetest.dir_to_facedir(vector.subtract(
pointed_thing.above, pointed_thing.under), true)
local p2 = under.param2
-- Placing a slab on an upside down slab should make it right-side up.
if p2 >= 20 and dir == 8 then
p2 = p2 - 20
-- same for the opposite case: slab below normal slab
elseif p2 <= 3 and dir == 4 then
p2 = p2 + 20
end
-- else attempt to place node with proper param2
minetest.item_place_node(ItemStack(wield_item), placer, pointed_thing, p2)
if not minetest.is_creative_enabled(player_name) then
itemstack:take_item()
end
return itemstack
else
return rotate_and_place(itemstack, placer, pointed_thing)
end
end
-- Use up-to-date stairs function if found
if minetest.global_exists("stairs") then
stairs.register_stair("_", nil, {}, {})
stairs.register_slab("_", nil, {}, {})
rotate_and_place = minetest.registered_nodes["stairs:stair__"].on_place
slab_place = minetest.registered_nodes["stairs:slab__"].on_place
minetest.unregister_item("stairs:stair__")
minetest.unregister_item("stairs:slab__")
end
local stairdefs = {
["stair"] = {
description = "%s Stair",
node_box = {
{-0.5, -0.5, -0.5, 0.5, 0.0, 0.5},
{-0.5, 0.0, 0.0, 0.5, 0.5, 0.5},
},
on_place = rotate_and_place,
recipes = {{
{0, 0, 1},
{0, 1, 1},
{1, 1, 1},
}, {
{1, 0, 0},
{1, 1, 0},
{1, 1, 1},
}},
craft_total = 8,
},
["slab"] = {
description = "%s Slab",
node_box = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
on_place = slab_place,
recipes = {{{1, 1, 1}}},
craft_total = 6,
},
["stair_inner"] = {
description = "Inner %s Stair",
node_box = {
{-0.5, -0.5, -0.5, 0.5, 0.0, 0.5},
{-0.5, 0.0, 0.0, 0.5, 0.5, 0.5},
{-0.5, 0.0, -0.5, 0.0, 0.5, 0.0},
},
on_place = rotate_and_place,
recipes = {{
{0, 1, 0},
{1, 1, 1},
{1, 1, 1},
}},
craft_total = 8,
},
["stair_outer"] = {
description = "Outer %s Stair",
node_box ={
{-0.5, -0.5, -0.5, 0.5, 0.0, 0.5},
{-0.5, 0.0, 0.0, 0.0, 0.5, 0.5},
},
on_place = rotate_and_place,
recipes = {{
{0, 1, 0},
{1, 1, 1},
}},
craft_total = 6,
},
}
return function(node, definition, craftitem)
for shape, data in pairs(stairdefs) do
local itemname = node:gsub(":", ":" .. shape .. "_")
local def = table.copy(definition)
def.description = data.description:format(definition.description)
def.drawtype = "nodebox"
def.paramtype = "light"
def.sunlight_propagates = definition.sunlight_propagates ~= false
def.paramtype2 = definition.paramtype2:find("color") and "colorfacedir" or "facedir"
def.node_box = {
type = "fixed",
fixed = data.node_box
}
def.on_place = data.on_place
minetest.register_node(itemname, def)
minetest.register_alias((itemname:gsub("^.+:", "stairs:")), itemname)
if craftitem and data.recipes and data.craft_total then
local items = {[0] = "", craftitem}
local count = 0
for _, recipe in pairs(data.recipes) do
count = 0
local filled = {}
-- Fill recipe template with items
for row in pairs(recipe) do
filled[row] = {}
for col in pairs(recipe[row]) do
count = count + recipe[row][col] -- will be 0 or 1
filled[row][col] = items[recipe[row][col]]
end
end
minetest.register_craft({
output = itemname .. " " .. data.craft_total,
recipe = filled,
})
end
-- Calculate reverse recipe (stair -> craftitem)
local divbycount = data.craft_total % count == 0 -- GCF:1 ratio
local divby2 = data.craft_total % 2 == 0 and count % 2 == 0 -- 2:1 ratio
local rev = {} -- Reverse recipe
for i = 1, ((divbycount and data.craft_total / count) or (divby2 and data.craft_total / 2) or data.craft_total) do
rev[i] = itemname
end
minetest.register_craft({
output = craftitem .. " " .. ((divbycount and 1) or (divby2 and count / 2) or count),
recipe = rev,
type = "shapeless",
})
end
end
end

Binary file not shown.

After

Width:  |  Height:  |  Size: 920 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 533 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 520 B

BIN
textures/greek_cement.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 533 B

BIN
textures/greek_chain.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

BIN
textures/greek_door_1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 407 B

BIN
textures/greek_door_2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 B

BIN
textures/greek_door_3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 B

BIN
textures/greek_door_4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B

BIN
textures/greek_fire.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 958 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 662 B

BIN
textures/greek_lamp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 665 B

BIN
textures/greek_lamp_inv.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 764 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 880 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 888 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 865 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 871 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 864 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 920 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 904 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 886 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 846 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 886 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 881 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 844 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 916 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 909 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 892 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 893 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 863 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 871 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 869 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 873 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 888 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 907 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 857 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 892 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 891 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 890 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 891 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 856 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 872 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 863 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 892 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 899 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 771 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 748 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 770 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 796 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 797 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 785 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 802 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 777 B

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 775 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 679 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 759 B

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 783 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 774 B

Some files were not shown because too many files have changed in this diff Show More