diff --git a/mods/ITEMS/mcl_banners/README.txt b/mods/ITEMS/mcl_banners/README.txt new file mode 100644 index 000000000..330f46d62 --- /dev/null +++ b/mods/ITEMS/mcl_banners/README.txt @@ -0,0 +1,7 @@ +License of code: WTFPL + +License of textures: See README.me in top directory of MineClone 2. + +License of models: GPLv3 (https://www.gnu.org/licenses/gpl-3.0.html) +Models author: 22i. +Source: https://github.com/22i/amc diff --git a/mods/ITEMS/mcl_banners/depends.txt b/mods/ITEMS/mcl_banners/depends.txt new file mode 100644 index 000000000..4fe444389 --- /dev/null +++ b/mods/ITEMS/mcl_banners/depends.txt @@ -0,0 +1,3 @@ +mcl_sounds? +mcl_core? +mcl_wool? diff --git a/mods/ITEMS/mcl_banners/description.txt b/mods/ITEMS/mcl_banners/description.txt new file mode 100644 index 000000000..fd303145a --- /dev/null +++ b/mods/ITEMS/mcl_banners/description.txt @@ -0,0 +1 @@ +Adds decorative banners. diff --git a/mods/ITEMS/mcl_banners/init.lua b/mods/ITEMS/mcl_banners/init.lua new file mode 100644 index 000000000..827085e3a --- /dev/null +++ b/mods/ITEMS/mcl_banners/init.lua @@ -0,0 +1,124 @@ +local node_sounds +if minetest.get_modpath("mcl_sounds") then + node_sounds = mcl_sounds.node_sound_wood_defaults() +end + +-- Helper function +local function round(num, idp) + local mult = 10^(idp or 0) + return math.floor(num * mult + 0.5) / mult +end + +-- Banner node +minetest.register_node("mcl_banners:standing_banner_white", { + description = "White Banner", + _doc_items_longdesc = "Banners are tall decorative blocks which can be placed on the floor.", + walkable = false, + is_ground_content = false, + paramtype = "light", + sunlight_propagates = true, + drawtype = "airlike", + inventory_image = "mcl_banners_item_base.png^mcl_banners_item_overlay.png", + wield_image = "mcl_banners_item_base.png^mcl_banners_item_overlay.png", + selection_box = {type = "fixed", fixed= {-0.2, -0.5, -0.2, 0.2, 0.5, 0.2} }, + tiles = {"mcl_banners_banner_base.png"}, + groups = { deco_block = 1, attached_node = 1 }, + stack_max = 16, + sounds = node_sounds, + + on_place = function(itemstack, placer, pointed_thing) + local above = pointed_thing.above + local under = pointed_thing.under + + -- Use pointed node's on_rightclick function first, if present + local node_under = minetest.get_node(under) + if placer and not placer:get_player_control().sneak then + if minetest.registered_nodes[node_under.name] and minetest.registered_nodes[node_under.name].on_rightclick then + return minetest.registered_nodes[node_under.name].on_rightclick(under, node_under, placer, itemstack) or itemstack + end + end + + -- Place the node! + local _, success = minetest.item_place_node(itemstack, placer, pointed_thing) + if not success then + return itemstack + end + + local place_pos + if minetest.registered_nodes[node_under.name].buildable_to then + place_pos = under + else + place_pos = above + end + place_pos.y = place_pos.y - 0.5 + + local banner = minetest.add_entity(place_pos, "mcl_banners:banner") + + -- Determine the rotation based on player's yaw + local yaw = placer:get_look_horizontal() + -- Select one of 16 possible rotations (0-15) + local rotation_level = round((yaw / (math.pi*2)) * 16) + local final_yaw = (rotation_level * (math.pi/8)) + math.pi + banner:set_yaw(final_yaw) + + if not minetest.settings:get_bool("creative_mode") then + itemstack:take_item() + end + minetest.sound_play({name="default_place_node_hard", gain=1.0}, {pos = place_pos}) + + return itemstack + end, + on_destruct = function(pos) + local objects = minetest.get_objects_inside_radius(pos, 0.5) + for _, v in ipairs(objects) do + if v:get_entity_name() == "mcl_banners:banner" then + v:remove() + end + end + end, + _mcl_hardness = 1, + _mcl_blast_resistance = 5, +}) + +minetest.register_entity("mcl_banners:banner", { + physical = false, + collide_with_objects = false, + visual = "mesh", + mesh = "amc_banner.b3d", + visual_size = { x=2.5, y=2.5 }, + textures = { "mcl_banners_banner_base.png" }, + collisionbox = { 0, 0, 0, 0, 0, 0 }, + + _base_color = nil, + + get_staticdata = function(self) + local out = { _base_color = self._base_color } + return minetest.serialize(out) + end, + on_activate = function(self, staticdata) + if staticdata and staticdata ~= "" then + local inp = minetest.deserialize(staticdata) + self._base_color = inp._base_color + end + self.object:set_armor_groups({immortal=1}) + end, +}) + +if minetest.get_modpath("mcl_core") and minetest.get_modpath("mcl_wool") then + minetest.register_craft({ + output = "mcl_banners:standing_banner_white", + recipe = { + { "mcl_wool:white", "mcl_wool:white", "mcl_wool:white" }, + { "mcl_wool:white", "mcl_wool:white", "mcl_wool:white" }, + { "", "mcl_core:stick", "" }, + } + }) + +end + +minetest.register_craft({ + type = "fuel", + recipe = "mcl_banners:standing_banner_white", + burntime = 15, +}) + diff --git a/mods/ITEMS/mcl_banners/mod.conf b/mods/ITEMS/mcl_banners/mod.conf new file mode 100644 index 000000000..211266581 --- /dev/null +++ b/mods/ITEMS/mcl_banners/mod.conf @@ -0,0 +1 @@ +name = mcl_banners diff --git a/mods/ITEMS/mcl_banners/models/amc_banner.b3d b/mods/ITEMS/mcl_banners/models/amc_banner.b3d new file mode 100644 index 000000000..f726fc1ad Binary files /dev/null and b/mods/ITEMS/mcl_banners/models/amc_banner.b3d differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_banner_base.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_banner_base.png new file mode 100644 index 000000000..6624632ee Binary files /dev/null and b/mods/ITEMS/mcl_banners/textures/mcl_banners_banner_base.png differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_base.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_base.png new file mode 100644 index 000000000..4a912ade6 Binary files /dev/null and b/mods/ITEMS/mcl_banners/textures/mcl_banners_base.png differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_item_base.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_item_base.png new file mode 100644 index 000000000..47f434899 Binary files /dev/null and b/mods/ITEMS/mcl_banners/textures/mcl_banners_item_base.png differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_item_overlay.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_item_overlay.png new file mode 100644 index 000000000..9ed2c05d9 Binary files /dev/null and b/mods/ITEMS/mcl_banners/textures/mcl_banners_item_overlay.png differ diff --git a/tools/Texture_Conversion_Table.csv b/tools/Texture_Conversion_Table.csv index 4c97a8dd0..2e1b448a4 100644 --- a/tools/Texture_Conversion_Table.csv +++ b/tools/Texture_Conversion_Table.csv @@ -842,3 +842,5 @@ Source path,Source file,Target path,Target file,xs,ys,xl,yl,xt,yt /assets/minecraft/textures/painting,paintings_kristoffer_zetterstrand.png,/mods/ITEMS/gemalde/textures,gemalde_24.png,128,192,64,64,0,0 /assets/minecraft/textures/painting,paintings_kristoffer_zetterstrand.png,/mods/ITEMS/gemalde/textures,gemalde_25.png,192,64,64,48,0,0 /assets/minecraft/textures/painting,paintings_kristoffer_zetterstrand.png,/mods/ITEMS/gemalde/textures,gemalde_26.png,192,112,64,48,0,0 +/assets/minecraft/textures/items,banner_base.png,/mods/ITEMS/mcl_banners/textures,mcl_banners_item_base.png,,,,,, +/assets/minecraft/textures/items,banner_overlay.png,/mods/ITEMS/mcl_banners/textures,mcl_banners_item_overlay.png,,,,,,