commit 717dc29f27d28e2d8986c89a6a34de2116b1f4dd Author: rainer Date: Thu Feb 12 12:52:09 2026 +0100 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d1b0ff4 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.blend1 diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..00073f6 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,18 @@ +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 +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..64ecf76 --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +# Waffles +_"And in the mornin', I'm makin' waffles!" - Donkey, Shrek 2001_ + +![screenshot.png](screenshot.png) + +### _Waffles for Dummies:_ +1. Obtain a waffle maker. +2. Place the waffle maker. +3. Obtain batter. +4. Open the waffle maker. +5. Place some batter in the waffle maker. +6. Close the waffle maker. +7. Wait for the waffle maker to open. +8. Take the cooked waffle. +9. Consume the cooked waffle. +10. Repeat from step 5. + +### Recipes +_All listed items are configurable. See [Configuration](#configuration)_. + +`waffles:waffle_maker`: +``` +C = casing (default:tin_ingot) +W = wiring (default:steel_ingot) +H = heating (default:copper_ingot) + ++-+-+-+ +|C|C|C| ++-+-+-+ +|W| |W| ++-+-+-+ +|C|H|C| ++-+-+-+ +``` + +`waffles:waffle_batter_3`: +``` +(Shapeless) +farming:flour, farming:flour, bucket:bucket_water + +This recipe is completely configurable. +``` + +`waffles:waffle_stack`: 8 `waffles:waffle` (Shapeless) + +`waffles:waffle_stack_short`: 4 `waffles:waffle` (Shapeless) + +### Configuration + +* `waffles.craftitem_maker_casing`: Waffle maker casing craftitem. +* `waffles.craftitem_maker_wiring`: Waffle maker wiring craftitem. +* `waffles.craftitem_maker_heating`: Waffle maker heating craftitem. +* `waffles.waffle_batter_recipe`: Waffle batter recipe craftitems. See `settingtypes.txt`. diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..c89201d --- /dev/null +++ b/init.lua @@ -0,0 +1,20 @@ +local MODNAME = minetest.get_current_modname() +local MODPATH = minetest.get_modpath(MODNAME) +local function include(filename, ...) return assert(loadfile(MODPATH .. "/" .. filename))(...) end + +local waffles = {} + +-- Return default sounds if available +waffles.default_sounds = function(name) + if minetest.global_exists("default") and default[name] then return default[name]() end +end + +waffles.setting_or = function(name, default) + local set = minetest.settings:get(MODNAME .. "." .. name) + return set ~= "" and set or default +end + +include("waffle.lua", waffles) +include("maker.lua", waffles) + +include("legacy.lua") diff --git a/legacy.lua b/legacy.lua new file mode 100644 index 0000000..c7418dd --- /dev/null +++ b/legacy.lua @@ -0,0 +1,28 @@ +local MODNAME = minetest.get_current_modname() + +local aliases = { + ["wafflemaker"] = "waffle_maker", + ["wafflemaker_open_empty"] = "waffle_maker_open", + ["wafflemaker_open_full"] = "waffle_maker_open", + ["wafflemaker_closed_full"] = "waffle_maker", + ["wafflemaker_open_done"] = "waffle_maker_open", + ["large_waffle"] = "waffle", + ["small_waffle"] = "waffle_quarter", + ["toaster"] = "waffle_maker", + ["breadslice"] = "waffle_quarter", + ["toast"] = "waffle_quarter", + ["toaster_with_breadslice"] = "waffle_maker", + ["toaster_toasting_breadslice"] = "waffle_maker", + ["toaster_with_toast"] = "waffle_maker", + ["toaster_waffle"] = "waffle_quarter", + ["toaster_waffle_pack"] = "waffle", + ["toaster_waffle_pack_4"] = "waffle", + ["toaster_waffle_pack_2"] = "waffle_quarter", + ["toaster_with_waffle"] = "waffle_maker", + ["toaster_toasting_waffle"] = "waffle_maker", + ["toaster_with_toasted_waffle"] = "waffle_maker", +} + +for old, new in pairs(aliases) do + minetest.register_alias(MODNAME .. ":" .. old, MODNAME .. ":" .. new) +end diff --git a/locale/de.tr b/locale/de.tr new file mode 100644 index 0000000..1082b72 --- /dev/null +++ b/locale/de.tr @@ -0,0 +1,13 @@ +# waffles +# German Translation + +Waffle Maker=Waffeleisen +Waffle Maker (Open)=Waffeleisen (geöffnet) + +Waffle=Waffel +Quarter of Waffle=Waffelviertel + +Stack of Waffles=Waffelstapel +Short Stack of Waffles=Kleiner Waffelstapel + +Waffle Batter=Waffelteig diff --git a/locale/fr.tr b/locale/fr.tr new file mode 100644 index 0000000..f8fbaa8 --- /dev/null +++ b/locale/fr.tr @@ -0,0 +1,13 @@ +# waffles +# French Translation + +Waffle Maker=Gaufrier +Waffle Maker (Open)=Gaufrier (Ouverte) + +Waffle=Gaufre +Quarter of Waffle=Quart de Gaufre + +Stack of Waffles=Pile de Gaufres +Short Stack of Waffles=Petite Pile de Gaufres + +Waffle Batter=Pâte à gaufre diff --git a/locale/ms.tr b/locale/ms.tr new file mode 100644 index 0000000..82e85e2 --- /dev/null +++ b/locale/ms.tr @@ -0,0 +1,13 @@ +# waffles +# Malay Translation + +Waffle Maker=Pembakar Wafel +Waffle Maker (Open)=Pembakar Wafel (Terbuka) + +Waffle=Wafel +Quarter of Waffle=Suku Wafel + +Stack of Waffles=Timbunan Wafel +Short Stack of Waffles=Timbunan Wafel Pendek + +Waffle Batter=Bater Wafel diff --git a/locale/template.tr b/locale/template.tr new file mode 100644 index 0000000..d695a20 --- /dev/null +++ b/locale/template.tr @@ -0,0 +1,13 @@ +# waffles +# Translation + +Waffle Maker= +Waffle Maker (Open)= + +Waffle= +Quarter of Waffle= + +Stack of Waffles= +Short Stack of Waffles= + +Waffle Batter= diff --git a/maker.lua b/maker.lua new file mode 100644 index 0000000..1a14b3e --- /dev/null +++ b/maker.lua @@ -0,0 +1,216 @@ +local waffles = ... + +local COOK_TIME = 6 +local MODNAME = minetest.get_current_modname() +local S = minetest.get_translator(MODNAME) + +-- Batter visual +local batters = {} +minetest.register_entity(MODNAME .. ":batter", { + visual = "mesh", + mesh = "waffles_waffle.obj", + textures = {"waffles_waffle_batter.png"}, + visual_size = vector.new(10, 10, 10), + pointable = false, + physical = false, + on_activate = function(self, parent) + if parent == "" then return self.object:remove() end + self._parent = minetest.string_to_pos(parent) + + -- Interpolate between batter and waffle + local cooked = minetest.get_meta(self._parent):get_float("cooked") + self.object:set_properties({textures = { + "waffles_waffle_batter.png^(waffles_waffle.png^[opacity:" .. cooked * 255 .. ")" + }}) + + self.object:set_pos(vector.add(self._parent, {x = 0, y = 4 / 16, z = 0})) + self.object:set_armor_groups({immortal = 1}) + + batters[minetest.hash_node_position(self._parent)] = self + end, + get_staticdata = function(self) + return minetest.pos_to_string(self._parent) + end, +}) + +local function remove_batter(pos) + local hash = minetest.hash_node_position(pos) + if batters[hash] then + batters[hash].object:remove() + batters[hash] = nil + end +end + +-- Waffle maker base definition +local def_base = { + description = S("Waffle Maker"), + drawtype = "mesh", + tiles = {"waffles_waffle_maker.png"}, + use_texture_alpha = "clip", + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "facedir", + groups = {snappy = 3, oddly_breakable_by_hand = 1}, + sounds = waffles.default_sounds("node_sound_metal_defaults"), + on_construct = function(pos) + minetest.get_meta(pos):set_float("cooked", -1) + end, + on_rightclick = function(pos, node, _, stack) + local meta = minetest.get_meta(pos) + local cooked = meta:get_float("cooked") + + local open = node.name:sub(-4) == "open" + local battering = stack:get_name():match(MODNAME .. ":waffle_batter$") + + -- Add batter if open and empty + if open and battering and cooked < 0 then + cooked = 0 + meta:set_float("cooked", cooked) + stack:take_item() + end + + -- Toggle as long as not placing batter on open maker + if not (open and battering) then + minetest.swap_node(pos, { + name = node.name:sub(1, open and -6 or -1) .. (open and "" or "_open"), + param2 = node.param2, + }) + + open = not open + end + + -- Handle batter + if open then + if cooked > -1 and not batters[minetest.hash_node_position(pos)] then + minetest.add_entity(pos, MODNAME .. ":batter", minetest.pos_to_string(pos)) + end + else + remove_batter(pos) + minetest.get_node_timer(pos):start(0.5) + end + + return stack + end, + on_punch = function(pos, node, puncher, ...) + local meta = minetest.get_meta(pos) + local cooked = meta:get_float("cooked") + + if cooked > -1 then + local inv = puncher:get_inventory() + + if cooked <= 0.2 or cooked >= 0.8 then + local stack = ItemStack(MODNAME .. (cooked <= 0.2 and ":waffle_batter" or ":waffle")) + + if inv:room_for_item("main", stack) then + inv:add_item("main", stack) + cooked = -1 + end + end + + if cooked < 0 then remove_batter(pos) end + meta:set_float("cooked", cooked) + end + + return minetest.node_punch(pos, node, puncher, ...) + end, + on_timer = function(pos) + if minetest.get_node(pos).name:sub(-4) == "open" then return end + + local meta = minetest.get_meta(pos) + local cooked = meta:get_float("cooked") + + if cooked > -1 and cooked < 1 then + meta:set_float("cooked", math.min(cooked + 0.5 / COOK_TIME, 1)) + minetest.get_node_timer(pos):start(0.5) + + if meta:get_float("cooked") == 1 then + minetest.add_particlespawner({ + amount = math.random(6, 10), + time = 3, + + minpos = vector.add(pos, {x = -0.5, y = 0, z = -0.5}), + maxpos = vector.add(pos, {x = 0.5, y = 0, z = 0.5}), + + minvel = {x = 0, y = 0.5, z = 0}, + maxvel = {x = 0, y = 0.5, z = 0}, + + minacc = {x = 0, y = 0, z = 0}, + maxacc = {x = 0, y = 0, z = 0}, + + minexptime = 2, + maxexptime = 2, + + minsize = 2, + maxsize = 6, + + texture = "waffles_steam.png", + }) + + minetest.registered_nodes[MODNAME .. ":waffle_maker"].on_rightclick(pos, minetest.get_node(pos), nil, ItemStack("")) + end + end + end, + can_dig = function(pos) + return minetest.get_meta(pos):get_float("cooked") == -1 + end, + on_destruct = remove_batter, +} + +minetest.register_lbm({ + label = "Start waffle maker timers", + name = MODNAME .. ":waffle_timers", + nodnames = {MODNAME .. ":waffle_maker"}, + run_at_every_load = true, + action = function(pos) + minetest.get_node_timer(pos):start(0.5) + end +}) + +-- Open and closed defs +local def_closed = table.copy(def_base) +local box_closed = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, +} + +def_closed.selection_box = box_closed +def_closed.collision_box = box_closed + +def_closed.mesh = "waffles_waffle_maker_closed.obj" + +local def_open = table.copy(def_base) +local box_open = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.0, 0.5}, + {-0.5, 0.0, 0.0, 0.5, 0.5, 0.5}, + }, +} + +def_open.selection_box = box_open +def_open.collision_box = box_open + +def_open.mesh = "waffles_waffle_maker_open.obj" + +def_open.description = S("Waffle Maker (Open)") +def_open.drop = MODNAME .. ":waffle_maker" +def_open.groups.not_in_creative_inventory = 1 + +minetest.register_node(MODNAME .. ":waffle_maker", def_closed) +minetest.register_node(MODNAME .. ":waffle_maker_open", def_open) + +-- Crafting recipe +local craftitems = { + casing = waffles.setting_or("crafitem_maker_casing", "default:tin_ingot"), + wiring = waffles.setting_or("crafitem_maker_wiring", "default:steel_ingot"), + heating = waffles.setting_or("crafitem_maker_heating", "default:copper_ingot"), +} + +minetest.register_craft({ + output = MODNAME .. ":waffle_maker", + recipe = { + {craftitems.casing, craftitems.casing, craftitems.casing}, + {craftitems.wiring, "", craftitems.wiring}, + {craftitems.casing, craftitems.heating, craftitems.casing}, + } +}) diff --git a/mod.conf b/mod.conf new file mode 100644 index 0000000..c84351a --- /dev/null +++ b/mod.conf @@ -0,0 +1,6 @@ +name = waffles +description = Waffles. Thats it. +optional_depends = default +release = 16795 +author = GreenXenith +title = Waffles diff --git a/models/waffles.blend b/models/waffles.blend new file mode 100644 index 0000000..cf968b0 Binary files /dev/null and b/models/waffles.blend differ diff --git a/models/waffles_waffle.obj b/models/waffles_waffle.obj new file mode 100644 index 0000000..8f176ab --- /dev/null +++ b/models/waffles_waffle.obj @@ -0,0 +1,44 @@ +# Blender v2.93.0 OBJ File: 'waffles.blend' +# www.blender.org +o waffle_Cube.007 +v -0.312500 -0.500000 0.312500 +v -0.312500 -0.437500 0.312500 +v -0.312500 -0.500000 -0.312500 +v -0.312500 -0.437500 -0.312500 +v 0.312500 -0.500000 0.312500 +v 0.312500 -0.437500 0.312500 +v 0.312500 -0.500000 -0.312500 +v 0.312500 -0.437500 -0.312500 +vt 0.625000 1.000000 +vt 0.562500 1.000000 +vt 0.562500 0.375000 +vt 0.625000 0.375000 +vt 0.625000 0.437500 +vt -0.000000 0.437500 +vt 0.000000 0.375000 +vt 0.062500 0.375000 +vt 0.062500 1.000000 +vt -0.000000 1.000000 +vt -0.000000 0.937500 +vt 0.625000 0.937500 +vt 0.625000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.375000 +vt 0.625000 0.375000 +vt -0.000000 0.375000 +vt 0.625000 0.375000 +vt 0.625000 1.000000 +vt -0.000000 1.000000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +s off +f 1/1/1 2/2/1 4/3/1 3/4/1 +f 3/4/2 4/5/2 8/6/2 7/7/2 +f 7/7/3 8/8/3 6/9/3 5/10/3 +f 5/10/4 6/11/4 2/12/4 1/1/4 +f 3/13/5 7/14/5 5/15/5 1/16/5 +f 8/17/6 4/18/6 2/19/6 6/20/6 diff --git a/models/waffles_waffle_maker_closed.obj b/models/waffles_waffle_maker_closed.obj new file mode 100644 index 0000000..ecdf4df --- /dev/null +++ b/models/waffles_waffle_maker_closed.obj @@ -0,0 +1,102 @@ +# Blender v2.93.0 OBJ File: 'waffles.blend' +# www.blender.org +o waffle_iron_closed_Cube.006 +v -0.375000 -0.500000 0.375000 +v -0.375000 -0.250000 0.375000 +v -0.375000 -0.500000 -0.375000 +v -0.375000 -0.250000 -0.375000 +v 0.375000 -0.500000 0.375000 +v 0.375000 -0.250000 0.375000 +v 0.375000 -0.500000 -0.375000 +v 0.375000 -0.250000 -0.375000 +v -0.375000 -0.437500 0.375000 +v -0.375000 -0.437500 -0.375000 +v 0.375000 -0.437500 0.375000 +v 0.375000 -0.437500 -0.375000 +v -0.375000 -0.125000 0.375000 +v -0.375000 -0.125000 -0.375000 +v -0.375000 -0.250000 0.375000 +v -0.375000 -0.250000 -0.375000 +v 0.375000 -0.125000 0.375000 +v 0.375000 -0.125000 -0.375000 +v 0.375000 -0.250000 0.375000 +v 0.375000 -0.250000 -0.375000 +v -0.062500 -0.437500 -0.375000 +v -0.062500 -0.312500 -0.375000 +v -0.062500 -0.437500 -0.437500 +v -0.062500 -0.312500 -0.437500 +v 0.062500 -0.437500 -0.375000 +v 0.062500 -0.312500 -0.375000 +v 0.062500 -0.437500 -0.437500 +v 0.062500 -0.312500 -0.437500 +vt 0.750000 0.000000 +vt 0.750000 0.250000 +vt 0.500000 0.250000 +vt 0.500000 0.000000 +vt 0.250000 0.250000 +vt 0.250000 0.000000 +vt 0.750000 0.000000 +vt 0.750000 0.250000 +vt 0.500000 0.250000 +vt 0.500000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.250000 +vt 0.500000 1.000000 +vt 0.250000 1.000000 +vt 0.750000 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.250000 +vt 0.750000 0.250000 +vt 0.250000 0.125000 +vt 0.000000 0.125000 +vt 0.000000 -0.000000 +vt 0.250000 -0.000000 +vt 0.000000 -0.000000 +vt 0.250000 -0.000000 +vt 0.250000 0.125000 +vt 0.000000 0.125000 +vt 0.000000 1.000000 +vt 0.000000 0.250000 +vt 0.250000 0.250000 +vt 0.250000 1.000000 +vt 0.750000 0.250000 +vt 1.000000 0.250000 +vt 1.000000 0.375000 +vt 0.750000 0.375000 +vt 0.000000 0.125000 +vt 0.250000 0.125000 +vt 0.833333 0.812500 +vt 0.833333 0.937500 +vt 0.812500 0.937500 +vt 0.812500 0.812500 +vt 0.770833 0.937500 +vt 0.770833 0.812500 +vt 0.750000 0.937500 +vt 0.750000 0.812500 +vt 0.770833 0.750000 +vt 0.812500 0.750000 +vt 0.812500 1.000000 +vt 0.770833 1.000000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +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/7/3 8/8/3 6/9/3 5/10/3 +f 5/11/4 6/12/4 2/2/4 1/1/4 +f 8/5/5 4/3/5 2/13/5 6/14/5 +f 10/15/6 12/16/6 11/17/6 9/18/6 +f 13/19/1 14/20/1 16/21/1 15/22/1 +f 19/23/3 20/24/3 18/25/3 17/26/3 +f 17/27/5 18/28/5 14/29/5 13/30/5 +f 15/31/4 19/32/4 17/33/4 13/34/4 +f 20/35/2 16/36/2 14/29/2 18/28/2 +f 21/37/1 22/38/1 24/39/1 23/40/1 +f 23/40/2 24/39/2 28/41/2 27/42/2 +f 27/42/3 28/41/3 26/43/3 25/44/3 +f 23/40/6 27/42/6 25/45/6 21/46/6 +f 28/41/5 24/39/5 22/47/5 26/48/5 diff --git a/models/waffles_waffle_maker_open.obj b/models/waffles_waffle_maker_open.obj new file mode 100644 index 0000000..18b1c03 --- /dev/null +++ b/models/waffles_waffle_maker_open.obj @@ -0,0 +1,109 @@ +# Blender v2.93.0 OBJ File: 'waffles.blend' +# www.blender.org +o waffle_iron_open_Cube.003 +v -0.375000 -0.500000 0.375000 +v -0.375000 -0.250000 0.375000 +v -0.375000 -0.500000 -0.375000 +v -0.375000 -0.250000 -0.375000 +v 0.375000 -0.500000 0.375000 +v 0.375000 -0.250000 0.375000 +v 0.375000 -0.500000 -0.375000 +v 0.375000 -0.250000 -0.375000 +v -0.375000 -0.437500 0.375000 +v -0.375000 -0.437500 -0.375000 +v 0.375000 -0.437500 0.375000 +v 0.375000 -0.437500 -0.375000 +v -0.375000 -0.250000 0.500000 +v -0.375000 0.500000 0.500000 +v -0.375000 -0.250000 0.375000 +v -0.375000 0.500000 0.375000 +v 0.375000 -0.250000 0.500000 +v 0.375000 0.500000 0.500000 +v 0.375000 -0.250000 0.375000 +v 0.375000 0.500000 0.375000 +v -0.062500 -0.437500 -0.375000 +v -0.062500 -0.312500 -0.375000 +v -0.062500 -0.437500 -0.437500 +v -0.062500 -0.312500 -0.437500 +v 0.062500 -0.437500 -0.375000 +v 0.062500 -0.312500 -0.375000 +v 0.062500 -0.437500 -0.437500 +v 0.062500 -0.312500 -0.437500 +vt 0.750000 0.000000 +vt 0.750000 0.250000 +vt 0.500000 0.250000 +vt 0.500000 0.000000 +vt 0.250000 0.250000 +vt 0.250000 0.000000 +vt 0.750000 0.000000 +vt 0.750000 0.250000 +vt 0.500000 0.250000 +vt 0.500000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.250000 +vt 0.500000 1.000000 +vt 0.250000 1.000000 +vt 0.750000 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.250000 +vt 0.750000 0.250000 +vt 0.250000 0.125000 +vt 0.000000 0.125000 +vt 0.000000 -0.000000 +vt 0.250000 -0.000000 +vt 0.250000 1.000000 +vt 0.250000 0.250000 +vt 0.500000 0.250000 +vt 0.500000 1.000000 +vt 0.000000 -0.000000 +vt 0.250000 -0.000000 +vt 0.250000 0.125000 +vt 0.000000 0.125000 +vt 0.250000 0.250000 +vt 0.250000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.250000 +vt 0.750000 0.250000 +vt 1.000000 0.250000 +vt 1.000000 0.375000 +vt 0.750000 0.375000 +vt 0.000000 0.125000 +vt 0.250000 0.125000 +vt 0.250000 0.250000 +vt 0.000000 0.250000 +vt 0.833333 0.812500 +vt 0.833333 0.937500 +vt 0.812500 0.937500 +vt 0.812500 0.812500 +vt 0.770833 0.937500 +vt 0.770833 0.812500 +vt 0.750000 0.937500 +vt 0.750000 0.812500 +vt 0.770833 0.750000 +vt 0.812500 0.750000 +vt 0.812500 1.000000 +vt 0.770833 1.000000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +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/7/3 8/8/3 6/9/3 5/10/3 +f 5/11/4 6/12/4 2/2/4 1/1/4 +f 8/5/5 4/3/5 2/13/5 6/14/5 +f 10/15/6 12/16/6 11/17/6 9/18/6 +f 13/19/1 14/20/1 16/21/1 15/22/1 +f 15/23/2 16/24/2 20/25/2 19/26/2 +f 19/27/3 20/28/3 18/29/3 17/30/3 +f 17/31/4 18/32/4 14/33/4 13/34/4 +f 15/35/6 19/36/6 17/37/6 13/38/6 +f 20/39/5 16/40/5 14/41/5 18/42/5 +f 21/43/1 22/44/1 24/45/1 23/46/1 +f 23/46/2 24/45/2 28/47/2 27/48/2 +f 27/48/3 28/47/3 26/49/3 25/50/3 +f 23/46/6 27/48/6 25/51/6 21/52/6 +f 28/47/5 24/45/5 22/53/5 26/54/5 diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000..2edc6f8 Binary files /dev/null and b/screenshot.png differ diff --git a/settingtypes.txt b/settingtypes.txt new file mode 100644 index 0000000..519a2d8 --- /dev/null +++ b/settingtypes.txt @@ -0,0 +1,11 @@ +# Crafitem used as waffle maker casing. +waffles.craftitem_maker_casing (Waffle maker casing craftitem) string default:tin_ingot + +# Crafitem used as waffle maker wiring. +waffles.craftitem_maker_wiring (Waffle maker wiring craftitem) string default:steel_ingot + +# Crafitem used as waffle maker heating. +waffles.craftitem_maker_heating (Waffle maker heating craftitem) string default:copper_ingot + +# Space/comma-separated list of craftitems used to make waffle batter. `item=replacement` defines replacements. +waffles.waffle_batter_recipe (Waffle batter recipe craftitems) string farming:flour farming:flour bucket:bucket_water=bucket:bucket_empty diff --git a/textures/waffles_steam.png b/textures/waffles_steam.png new file mode 100644 index 0000000..fe1360a Binary files /dev/null and b/textures/waffles_steam.png differ diff --git a/textures/waffles_waffle.png b/textures/waffles_waffle.png new file mode 100644 index 0000000..eada02f Binary files /dev/null and b/textures/waffles_waffle.png differ diff --git a/textures/waffles_waffle_batter.png b/textures/waffles_waffle_batter.png new file mode 100644 index 0000000..17b0367 Binary files /dev/null and b/textures/waffles_waffle_batter.png differ diff --git a/textures/waffles_waffle_batter_inv.png b/textures/waffles_waffle_batter_inv.png new file mode 100644 index 0000000..37da9ef Binary files /dev/null and b/textures/waffles_waffle_batter_inv.png differ diff --git a/textures/waffles_waffle_block_side.png b/textures/waffles_waffle_block_side.png new file mode 100644 index 0000000..52b0604 Binary files /dev/null and b/textures/waffles_waffle_block_side.png differ diff --git a/textures/waffles_waffle_block_top.png b/textures/waffles_waffle_block_top.png new file mode 100644 index 0000000..19cb2d1 Binary files /dev/null and b/textures/waffles_waffle_block_top.png differ diff --git a/textures/waffles_waffle_inv.png b/textures/waffles_waffle_inv.png new file mode 100644 index 0000000..437ed9f Binary files /dev/null and b/textures/waffles_waffle_inv.png differ diff --git a/textures/waffles_waffle_maker.png b/textures/waffles_waffle_maker.png new file mode 100644 index 0000000..c88dfee Binary files /dev/null and b/textures/waffles_waffle_maker.png differ diff --git a/textures/waffles_waffle_quarter.png b/textures/waffles_waffle_quarter.png new file mode 100644 index 0000000..bb8afa4 Binary files /dev/null and b/textures/waffles_waffle_quarter.png differ diff --git a/waffle.lua b/waffle.lua new file mode 100644 index 0000000..40533d6 --- /dev/null +++ b/waffle.lua @@ -0,0 +1,115 @@ +local waffles = ... + +local MODNAME = minetest.get_current_modname() +local S = minetest.get_translator(MODNAME) + +-- Waffle +local box_waffle = { + type = "fixed", + fixed = {-5 / 16, -8 / 16, -5 / 16, 5 / 16, - 7 / 16, 5 / 16}, +} + +minetest.register_node(MODNAME .. ":waffle", { + description = S("Waffle"), + drawtype = "mesh", + mesh = "waffles_waffle.obj", + tiles = {"waffles_waffle.png"}, + use_texture_alpha = "clip", + inventory_image = "waffles_waffle_inv.png", + wield_image = "waffles_waffle_inv.png", + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "facedir", + groups = {snappy = 3, oddly_breakable_by_hand = 1}, + selection_box = box_waffle, + collision_box = box_waffle, + on_use = minetest.item_eat(8), + on_place = minetest.rotate_and_place, +}) + +minetest.register_craftitem(MODNAME .. ":waffle_quarter", { + description = S("Quarter of Waffle"), + inventory_image = "waffles_waffle_quarter.png", + on_use = minetest.item_eat(2) +}) + +minetest.register_craft({ + output = MODNAME .. ":waffle_quarter 4", + type = "shapeless", + recipe = {MODNAME .. ":waffle"}, +}) + +-- Waffle stacks +minetest.register_node(MODNAME .. ":waffle_stack", { + description = S("Stack of Waffles"), + tiles = {"waffles_waffle_block_top.png", "waffles_waffle_block_top.png", "waffles_waffle_block_side.png"}, + paramtype2 = "facedir", + groups = {snappy = 3, oddly_breakable_by_hand = 1}, + on_place = minetest.rotate_and_place, +}) + +minetest.register_node(MODNAME .. ":waffle_stack_short", { + description = S("Short Stack of Waffles"), + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + }, + tiles = {"waffles_waffle_block_top.png", "waffles_waffle_block_top.png", "waffles_waffle_block_side.png"}, + paramtype2 = "facedir", + paramtype = "light", + groups = {snappy = 3, oddly_breakable_by_hand = 1}, + on_place = minetest.rotate_and_place, +}) + +local craftitem = MODNAME .. ":waffle" +minetest.register_craft({ + output = MODNAME .. ":waffle_stack", + type = "shapeless", + recipe = {craftitem, craftitem, craftitem, craftitem, craftitem, craftitem, craftitem, craftitem}, +}) + +minetest.register_craft({ + output = MODNAME .. ":waffle_stack_short", + type = "shapeless", + recipe = {craftitem, craftitem, craftitem, craftitem}, +}) + +minetest.register_craft({ + output = MODNAME .. ":waffle 8", + type = "shapeless", + recipe = {MODNAME .. ":waffle_stack"} +}) + +minetest.register_craft({ + output = MODNAME .. ":waffle 4", + type = "shapeless", + recipe = {MODNAME .. ":waffle_stack_short"} +}) + +-- Batter +minetest.register_craftitem(MODNAME .. ":waffle_batter", { + description = S("Waffle Batter"), + inventory_image = "waffles_waffle_batter_inv.png", + use_texture_alpha = true, +}) + +local craftitems = waffles.setting_or("waffle_batter_recipe", "farming:flour farming:flour bucket:bucket_water=bucket:bucket_empty") +local recipe = {} +local replacements = {} + +for _, item in pairs(craftitems:split("[, ]", false, -1, true)) do + local set = item:split("=") + table.insert(recipe, set[1]) + + if set[2] then + table.insert(replacements, {set[1], set[2]}) + end +end + +minetest.register_craft({ + output = MODNAME .. ":waffle_batter 3", + type = "shapeless", + recipe = recipe, + replacements = #replacements > 0 and replacements or nil, +})