From f2ed6f126eb13a660059bd4577b9e414c11d80b2 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Mon, 28 Aug 2017 14:19:46 +0200 Subject: [PATCH] =?UTF-8?q?Add=205=20=E2=80=9CMinecart=20with=20X=E2=80=9D?= =?UTF-8?q?=20entities?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Minecart with Chest * Minecart with Furnace * Minecart with TNT * Minecart with Hopper * Minecart with Command Block --- mods/ENTITIES/mcl_minecarts/depends.txt | 5 + mods/ENTITIES/mcl_minecarts/init.lua | 696 +++++++++++------- .../models/mcl_minecarts_minecart_block.b3d | Bin 0 -> 6323 bytes .../models/mcl_minecarts_minecart_chest.b3d | Bin 0 -> 7614 bytes .../models/mcl_minecarts_minecart_hopper.b3d | Bin 0 -> 10577 bytes .../textures/mcl_minecarts_minecart_chest.png | Bin 0 -> 271 bytes .../mcl_minecarts_minecart_command_block.png | Bin 0 -> 243 bytes .../mcl_minecarts_minecart_furnace.png | Bin 0 -> 271 bytes .../mcl_minecarts_minecart_hopper.png | Bin 0 -> 236 bytes .../textures/mcl_minecarts_minecart_tnt.png | Bin 0 -> 249 bytes mods/MISC/mcl_wip/depends.txt | 1 + mods/MISC/mcl_wip/init.lua | 5 + tools/Texture_Conversion_Table.csv | 5 + 13 files changed, 435 insertions(+), 277 deletions(-) create mode 100644 mods/ENTITIES/mcl_minecarts/models/mcl_minecarts_minecart_block.b3d create mode 100644 mods/ENTITIES/mcl_minecarts/models/mcl_minecarts_minecart_chest.b3d create mode 100644 mods/ENTITIES/mcl_minecarts/models/mcl_minecarts_minecart_hopper.b3d create mode 100644 mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_chest.png create mode 100644 mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_command_block.png create mode 100644 mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_furnace.png create mode 100644 mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_hopper.png create mode 100644 mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_tnt.png diff --git a/mods/ENTITIES/mcl_minecarts/depends.txt b/mods/ENTITIES/mcl_minecarts/depends.txt index 5774b1e5..13828b3c 100644 --- a/mods/ENTITIES/mcl_minecarts/depends.txt +++ b/mods/ENTITIES/mcl_minecarts/depends.txt @@ -2,5 +2,10 @@ mcl_core mcl_sounds mcl_player mcl_achievements +mcl_chests +mcl_furnaces +mesecons_commandblock +mcl_hoppers +mcl_tnt mesecons? doc_identifier? diff --git a/mods/ENTITIES/mcl_minecarts/init.lua b/mods/ENTITIES/mcl_minecarts/init.lua index 6766e843..f20935ae 100644 --- a/mods/ENTITIES/mcl_minecarts/init.lua +++ b/mods/ENTITIES/mcl_minecarts/init.lua @@ -13,312 +13,422 @@ end dofile(mcl_minecarts.modpath.."/functions.lua") dofile(mcl_minecarts.modpath.."/rails.lua") -mcl_minecarts.cart = { - physical = false, - collisionbox = {-10/16., -0.5, -10/16, 10/16, 0.25, 10/16}, - visual = "mesh", - mesh = "mcl_minecarts_minecart.b3d", - visual_size = {x=1, y=1}, - textures = {"mcl_minecarts_minecart.png"}, - - _driver = nil, - _punched = false, -- used to re-send _velocity and position - _velocity = {x=0, y=0, z=0}, -- only used on punch - _start_pos = nil, -- Used to calculate distance for “On A Rail” achievement - _old_dir = {x=0, y=0, z=0}, - _old_pos = nil, - _old_switch = 0, - _railtype = nil, -} -function mcl_minecarts.cart:on_rightclick(clicker) - if not clicker or not clicker:is_player() then - return - end - local player_name = clicker:get_player_name() - if self._driver and player_name == self._driver then - self._driver = nil - self._start_pos = nil - clicker:set_detach() - elseif not self._driver then - self._driver = player_name - self._start_pos = self.object:getpos() - mcl_player.player_attached[player_name] = true - clicker:set_attach(self.object, "", {x=0, y=3, z=0}, {x=0, y=0, z=0}) - end -end +local function register_entity(entity_id, mesh, textures, drop) + local cart = { + physical = false, + collisionbox = {-10/16., -0.5, -10/16, 10/16, 0.25, 10/16}, + visual = "mesh", + mesh = mesh, + visual_size = {x=1, y=1}, + textures = textures, -function mcl_minecarts.cart:on_activate(staticdata, dtime_s) - self.object:set_armor_groups({immortal=1}) -end + _driver = nil, + _punched = false, -- used to re-send _velocity and position + _velocity = {x=0, y=0, z=0}, -- only used on punch + _start_pos = nil, -- Used to calculate distance for “On A Rail” achievement + _old_dir = {x=0, y=0, z=0}, + _old_pos = nil, + _old_switch = 0, + _railtype = nil, + } -function mcl_minecarts.cart:on_punch(puncher, time_from_last_punch, tool_capabilities, direction) - local pos = self.object:getpos() - if not self._railtype then - local node = minetest.get_node(vector_floor(pos)).name - self._railtype = minetest.get_item_group(node, "connect_to_raillike") + function cart:on_rightclick(clicker) + if not clicker or not clicker:is_player() then + return + end + local player_name = clicker:get_player_name() + if self._driver and player_name == self._driver then + self._driver = nil + self._start_pos = nil + clicker:set_detach() + elseif not self._driver then + self._driver = player_name + self._start_pos = self.object:getpos() + mcl_player.player_attached[player_name] = true + clicker:set_attach(self.object, "", {x=0, y=3, z=0}, {x=0, y=0, z=0}) + end end - - if not puncher or not puncher:is_player() then - local cart_dir = mcl_minecarts:get_rail_direction(pos, {x=1, y=0, z=0}, nil, nil, self._railtype) + + function cart:on_activate(staticdata, dtime_s) + self.object:set_armor_groups({immortal=1}) + end + + function cart:on_punch(puncher, time_from_last_punch, tool_capabilities, direction) + local pos = self.object:getpos() + if not self._railtype then + local node = minetest.get_node(vector_floor(pos)).name + self._railtype = minetest.get_item_group(node, "connect_to_raillike") + end + + if not puncher or not puncher:is_player() then + local cart_dir = mcl_minecarts:get_rail_direction(pos, {x=1, y=0, z=0}, nil, nil, self._railtype) + if vector.equals(cart_dir, {x=0, y=0, z=0}) then + return + end + self._velocity = vector.multiply(cart_dir, 3) + self._old_pos = nil + self._punched = true + return + end + + if puncher:get_player_control().sneak then + if self._driver then + if self._old_pos then + self.object:setpos(self._old_pos) + end + mcl_player.player_attached[self._driver] = nil + local player = minetest.get_player_by_name(self._driver) + if player then + player:set_detach() + end + end + + if not minetest.settings:get_bool("creative_mode") then + for d=1, #drop do + minetest.add_item(self.object:getpos(), drop[d]) + end + end + self.object:remove() + return + end + + local vel = self.object:getvelocity() + if puncher:get_player_name() == self._driver then + if math.abs(vel.x + vel.z) > 7 then + return + end + end + + local punch_dir = mcl_minecarts:velocity_to_dir(puncher:get_look_dir()) + punch_dir.y = 0 + local cart_dir = mcl_minecarts:get_rail_direction(pos, punch_dir, nil, nil, self._railtype) if vector.equals(cart_dir, {x=0, y=0, z=0}) then return end - self._velocity = vector.multiply(cart_dir, 3) + + time_from_last_punch = math.min(time_from_last_punch, tool_capabilities.full_punch_interval) + local f = 3 * (time_from_last_punch / tool_capabilities.full_punch_interval) + + self._velocity = vector.multiply(cart_dir, f) self._old_pos = nil self._punched = true - return end - if puncher:get_player_control().sneak then + function cart:on_step(dtime) + local vel = self.object:getvelocity() + local update = {} + if self._punched then + vel = vector.add(vel, self._velocity) + self.object:setvelocity(vel) + self._old_dir.y = 0 + elseif vector.equals(vel, {x=0, y=0, z=0}) then + return + end + + local dir, last_switch = nil, nil + local pos = self.object:getpos() + if self._old_pos and not self._punched then + local flo_pos = vector_floor(pos) + local flo_old = vector_floor(self._old_pos) + if vector.equals(flo_pos, flo_old) then + return + end + end + + local ctrl, player = nil, nil if self._driver then - if self._old_pos then - self.object:setpos(self._old_pos) - end - mcl_player.player_attached[self._driver] = nil - local player = minetest.get_player_by_name(self._driver) + player = minetest.get_player_by_name(self._driver) if player then - player:set_detach() + ctrl = player:get_player_control() end end - - if not minetest.settings:get_bool("creative_mode") then - minetest.add_item(self.object:getpos(), "mcl_minecarts:minecart") - end - self.object:remove() - return - end - - local vel = self.object:getvelocity() - if puncher:get_player_name() == self._driver then - if math.abs(vel.x + vel.z) > 7 then - return - end - end - - local punch_dir = mcl_minecarts:velocity_to_dir(puncher:get_look_dir()) - punch_dir.y = 0 - local cart_dir = mcl_minecarts:get_rail_direction(pos, punch_dir, nil, nil, self._railtype) - if vector.equals(cart_dir, {x=0, y=0, z=0}) then - return - end - - time_from_last_punch = math.min(time_from_last_punch, tool_capabilities.full_punch_interval) - local f = 3 * (time_from_last_punch / tool_capabilities.full_punch_interval) - - self._velocity = vector.multiply(cart_dir, f) - self._old_pos = nil - self._punched = true -end - -function mcl_minecarts.cart:on_step(dtime) - local vel = self.object:getvelocity() - local update = {} - if self._punched then - vel = vector.add(vel, self._velocity) - self.object:setvelocity(vel) - self._old_dir.y = 0 - elseif vector.equals(vel, {x=0, y=0, z=0}) then - return - end - - local dir, last_switch = nil, nil - local pos = self.object:getpos() - if self._old_pos and not self._punched then - local flo_pos = vector_floor(pos) - local flo_old = vector_floor(self._old_pos) - if vector.equals(flo_pos, flo_old) then - return - end - end - - local ctrl, player = nil, nil - if self._driver then - player = minetest.get_player_by_name(self._driver) - if player then - ctrl = player:get_player_control() - end - end - if self._old_pos then - local diff = vector.subtract(self._old_pos, pos) - for _,v in ipairs({"x","y","z"}) do - if math.abs(diff[v]) > 1.1 then - local expected_pos = vector.add(self._old_pos, self._old_dir) - dir, last_switch = mcl_minecarts:get_rail_direction(pos, self._old_dir, ctrl, self._old_switch, self._railtype) - if vector.equals(dir, {x=0, y=0, z=0}) then - dir = false - pos = vector.new(expected_pos) - update.pos = true + if self._old_pos then + local diff = vector.subtract(self._old_pos, pos) + for _,v in ipairs({"x","y","z"}) do + if math.abs(diff[v]) > 1.1 then + local expected_pos = vector.add(self._old_pos, self._old_dir) + dir, last_switch = mcl_minecarts:get_rail_direction(pos, self._old_dir, ctrl, self._old_switch, self._railtype) + if vector.equals(dir, {x=0, y=0, z=0}) then + dir = false + pos = vector.new(expected_pos) + update.pos = true + end + break end - break end end - end - - if vel.y == 0 then - for _,v in ipairs({"x", "z"}) do - if vel[v] ~= 0 and math.abs(vel[v]) < 0.9 then - vel[v] = 0 + + if vel.y == 0 then + for _,v in ipairs({"x", "z"}) do + if vel[v] ~= 0 and math.abs(vel[v]) < 0.9 then + vel[v] = 0 + update.vel = true + end + end + end + + local cart_dir = mcl_minecarts:velocity_to_dir(vel) + local max_vel = mcl_minecarts.speed_max + if not dir then + dir, last_switch = mcl_minecarts:get_rail_direction(pos, cart_dir, ctrl, self._old_switch, self._railtype) + end + + local new_acc = {x=0, y=0, z=0} + if vector.equals(dir, {x=0, y=0, z=0}) then + vel = {x=0, y=0, z=0} + update.vel = true + else + -- If the direction changed + if dir.x ~= 0 and self._old_dir.z ~= 0 then + vel.x = dir.x * math.abs(vel.z) + vel.z = 0 + pos.z = math.floor(pos.z + 0.5) + update.pos = true + end + if dir.z ~= 0 and self._old_dir.x ~= 0 then + vel.z = dir.z * math.abs(vel.x) + vel.x = 0 + pos.x = math.floor(pos.x + 0.5) + update.pos = true + end + -- Up, down? + if dir.y ~= self._old_dir.y then + vel.y = dir.y * math.abs(vel.x + vel.z) + pos = vector.round(pos) + update.pos = true + end + + -- Slow down or speed up + local acc = dir.y * -1.8 + + local speed_mod = tonumber(minetest.get_meta(pos):get_string("cart_acceleration")) + if speed_mod and speed_mod ~= 0 then + if speed_mod > 0 then + for _,v in ipairs({"x","y","z"}) do + if math.abs(vel[v]) >= max_vel then + speed_mod = 0 + break + end + end + end + acc = acc + (speed_mod * 8) + else + acc = acc - 0.4 + end + + new_acc = vector.multiply(dir, acc) + end + + self.object:setacceleration(new_acc) + self._old_pos = vector.new(pos) + self._old_dir = vector.new(dir) + self._old_switch = last_switch + + -- Limits + for _,v in ipairs({"x","y","z"}) do + if math.abs(vel[v]) > max_vel then + vel[v] = mcl_minecarts:get_sign(vel[v]) * max_vel update.vel = true end end + + -- Give achievement when player reached a distance of 1000 nodes from the start position + if self._driver and (vector.distance(self._start_pos, pos) >= 1000) then + awards.unlock(self._driver, "mcl:onARail") + end + + if update.pos or self._punched then + local yaw = 0 + if dir.x < 0 then + yaw = 0.5 + elseif dir.x > 0 then + yaw = 1.5 + elseif dir.z < 0 then + yaw = 1 + end + self.object:setyaw(yaw * math.pi) + end + + if self._punched then + self._punched = false + end + + if not (update.vel or update.pos) then + return + end + + + local anim = {x=0, y=0} + if dir.y == -1 then + anim = {x=1, y=1} + elseif dir.y == 1 then + anim = {x=2, y=2} + end + self.object:set_animation(anim, 1, 0) + + self.object:setvelocity(vel) + if update.pos then + self.object:setpos(pos) + end + update = nil end - - local cart_dir = mcl_minecarts:velocity_to_dir(vel) - local max_vel = mcl_minecarts.speed_max - if not dir then - dir, last_switch = mcl_minecarts:get_rail_direction(pos, cart_dir, ctrl, self._old_switch, self._railtype) - end - - local new_acc = {x=0, y=0, z=0} - if vector.equals(dir, {x=0, y=0, z=0}) then - vel = {x=0, y=0, z=0} - update.vel = true - else - -- If the direction changed - if dir.x ~= 0 and self._old_dir.z ~= 0 then - vel.x = dir.x * math.abs(vel.z) - vel.z = 0 - pos.z = math.floor(pos.z + 0.5) - update.pos = true - end - if dir.z ~= 0 and self._old_dir.x ~= 0 then - vel.z = dir.z * math.abs(vel.x) - vel.x = 0 - pos.x = math.floor(pos.x + 0.5) - update.pos = true - end - -- Up, down? - if dir.y ~= self._old_dir.y then - vel.y = dir.y * math.abs(vel.x + vel.z) - pos = vector.round(pos) - update.pos = true - end - - -- Slow down or speed up.. - local acc = dir.y * -1.8 - - local speed_mod = tonumber(minetest.get_meta(pos):get_string("cart_acceleration")) - if speed_mod and speed_mod ~= 0 then - if speed_mod > 0 then - for _,v in ipairs({"x","y","z"}) do - if math.abs(vel[v]) >= max_vel then - speed_mod = 0 - break - end + + minetest.register_entity(entity_id, cart) +end + +register_entity("mcl_minecarts:minecart", + "mcl_minecarts_minecart.b3d", + {"mcl_minecarts_minecart.png"}, + {"mcl_minecarts:minecart"}) +register_entity("mcl_minecarts:chest_minecart", + "mcl_minecarts_minecart_chest.b3d", + { "mcl_chests_normal.png", "mcl_minecarts_minecart.png" }, + {"mcl_minecarts:minecart", "mcl_chests:chest"}) +register_entity("mcl_minecarts:furnace_minecart", + "mcl_minecarts_minecart_block.b3d", + { + "default_furnace_top.png", + "default_furnace_top.png", + "default_furnace_front.png", + "default_furnace_side.png", + "default_furnace_side.png", + "default_furnace_side.png", + "mcl_minecarts_minecart.png", + }, + {"mcl_minecarts:minecart", "mcl_furnaces:furnace"}) +register_entity("mcl_minecarts:tnt_minecart", + "mcl_minecarts_minecart_block.b3d", + { + "default_tnt_top.png", + "default_tnt_bottom.png", + "default_tnt_side.png", + "default_tnt_side.png", + "default_tnt_side.png", + "default_tnt_side.png", + "mcl_minecarts_minecart.png", + }, + {"mcl_minecarts:minecart", "mcl_tnt:tnt"}) +register_entity("mcl_minecarts:hopper_minecart", + "mcl_minecarts_minecart_hopper.b3d", + { + "mcl_hoppers_hopper_inside.png", + "mcl_minecarts_minecart.png", + "mcl_hoppers_hopper_outside.png", + "mcl_hoppers_hopper_top.png", + }, + {"mcl_minecarts:minecart", "mcl_hoppers:hopper"}) +register_entity("mcl_minecarts:command_block_minecart", + "mcl_minecarts_minecart_block.b3d", + { + "jeija_commandblock_off.png^[verticalframe:2:0", + "jeija_commandblock_off.png^[verticalframe:2:0", + "jeija_commandblock_off.png^[verticalframe:2:0", + "jeija_commandblock_off.png^[verticalframe:2:0", + "jeija_commandblock_off.png^[verticalframe:2:0", + "jeija_commandblock_off.png^[verticalframe:2:0", + "mcl_minecarts_minecart.png", + }, + {"mcl_minecarts:minecart"}) + +local register_craftitem = function(itemstring, entity_id, description, longdesc, usagehelp, icon) + local def = { + stack_max = 1, + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return + end + + -- Call on_rightclick if the pointed node defines it + local node = minetest.get_node(pointed_thing.under) + if placer and not placer:get_player_control().sneak then + if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then + return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack end end - acc = acc + (speed_mod * 8) - else - acc = acc - 0.4 - end - - new_acc = vector.multiply(dir, acc) - end - - self.object:setacceleration(new_acc) - self._old_pos = vector.new(pos) - self._old_dir = vector.new(dir) - self._old_switch = last_switch - - -- Limits - for _,v in ipairs({"x","y","z"}) do - if math.abs(vel[v]) > max_vel then - vel[v] = mcl_minecarts:get_sign(vel[v]) * max_vel - update.vel = true - end - end - -- Give achievement when player reached a distance of 1000 nodes from the start position - if self._driver and (vector.distance(self._start_pos, pos) >= 1000) then - awards.unlock(self._driver, "mcl:onARail") - end - - if update.pos or self._punched then - local yaw = 0 - if dir.x < 0 then - yaw = 0.5 - elseif dir.x > 0 then - yaw = 1.5 - elseif dir.z < 0 then - yaw = 1 - end - self.object:setyaw(yaw * math.pi) - end - - if self._punched then - self._punched = false - end - - if not (update.vel or update.pos) then - return - end - - - local anim = {x=0, y=0} - if dir.y == -1 then - anim = {x=1, y=1} - elseif dir.y == 1 then - anim = {x=2, y=2} - end - self.object:set_animation(anim, 1, 0) - - self.object:setvelocity(vel) - if update.pos then - self.object:setpos(pos) - end - update = nil -end - -minetest.register_entity("mcl_minecarts:minecart", mcl_minecarts.cart) -minetest.register_craftitem("mcl_minecarts:minecart", { - description = "Minecart", - _doc_items_longdesc = "Minecarts can be used for a quick transportion on rails." .. "\n" .. - "Minecarts only ride on rails and always follow the tracks. At a T-junction with no straight way ahead, they turn left. The speed is affected by the rail type.", - _doc_items_usagehelp = "You can place the minecart on rails. Right-click it to enter it. Punch it to get it moving." .. "\n" .. - "To obtain the minecart, punch it while holding down the sneak key.", - - inventory_image = "mcl_minecarts_minecart_normal.png", - wield_image = "mcl_minecarts_minecart_normal.png", - stack_max = 1, - on_place = function(itemstack, placer, pointed_thing) - if not pointed_thing.type == "node" then - return - end - - -- Call on_rightclick if the pointed node defines it - local node = minetest.get_node(pointed_thing.under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack + local railpos + if mcl_minecarts:is_rail(pointed_thing.under) then + railpos = pointed_thing.under + elseif mcl_minecarts:is_rail(pointed_thing.above) then + railpos = pointed_thing.under + else + return end - end + local cart = minetest.add_entity(railpos, entity_id) + local railtype = minetest.get_item_group(node.name, "connect_to_raillike") + local cart_dir = mcl_minecarts:get_rail_direction(railpos, {x=1, y=0, z=0}, nil, nil, railtype) + cart:setyaw(minetest.dir_to_yaw(cart_dir)) - local railpos - if mcl_minecarts:is_rail(pointed_thing.under) then - railpos = pointed_thing.under - elseif mcl_minecarts:is_rail(pointed_thing.above) then - railpos = pointed_thing.under - else - return - end - local cart = minetest.add_entity(railpos, "mcl_minecarts:minecart") - local railtype = minetest.get_item_group(node.name, "connect_to_raillike") - local cart_dir = mcl_minecarts:get_rail_direction(railpos, {x=1, y=0, z=0}, nil, nil, railtype) - cart:setyaw(minetest.dir_to_yaw(cart_dir)) - - if not minetest.settings:get_bool("creative_mode") then - itemstack:take_item() - end - return itemstack - end, - groups = { minecart = 1, transport = 1}, -}) - -if minetest.get_modpath("doc_identifier") ~= nil then - doc.sub.identifier.register_object("mcl_minecarts:minecart", "craftitems", "mcl_minecarts:minecart") + if not minetest.settings:get_bool("creative_mode") then + itemstack:take_item() + end + return itemstack + end, + groups = { minecart = 1, transport = 1}, + } + def.description = description + def._doc_items_longdec = longdesc + def._doc_items_usagehelp = usagehelp + def.inventory_image = icon + def.wield_image = icon + minetest.register_craftitem(itemstring, def) end +register_craftitem( + "mcl_minecarts:minecart", + "mcl_minecarts:minecart", + "Minecart", + "Minecarts can be used for a quick transportion on rails." .. "\n" .. + "Minecarts only ride on rails and always follow the tracks. At a T-junction with no straight way ahead, they turn left. The speed is affected by the rail type.", + + "You can place the minecart on rails. Right-click it to enter it. Punch it to get it moving." .. "\n" .. + "To obtain the minecart, punch it while holding down the sneak key.", + "mcl_minecarts_minecart_normal.png" +) + +register_craftitem( + "mcl_minecarts:hopper_minecart", + "mcl_minecarts:hopper_minecart", + "Minecart with Hopper", + nil, nil, + "mcl_minecarts_minecart_hopper.png" +) + +register_craftitem( + "mcl_minecarts:tnt_minecart", + "mcl_minecarts:tnt_minecart", + "Minecart with TNT", + nil, nil, + "mcl_minecarts_minecart_tnt.png" +) + +register_craftitem( + "mcl_minecarts:chest_minecart", + "mcl_minecarts:chest_minecart", + "Minecart with Chest", + nil, nil, + "mcl_minecarts_minecart_chest.png" +) + +register_craftitem( + "mcl_minecarts:furnace_minecart", + "mcl_minecarts:furnace_minecart", + "Minecart with Furnace", + nil, nil, + "mcl_minecarts_minecart_furnace.png" +) + +register_craftitem( + "mcl_minecarts:command_block_minecart", + "mcl_minecarts:command_block_minecart", + "Minecart with Command Block", + nil, nil, + "mcl_minecarts_minecart_command_block.png" +) + + + minetest.register_craft({ output = "mcl_minecarts:minecart", recipe = { @@ -326,3 +436,35 @@ minetest.register_craft({ {"mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot"}, }, }) + +minetest.register_craft({ + output = "mcl_minecarts:hopper_minecart", + recipe = { + {"mcl_hoppers:hopper"}, + {"mcl_minecarts:minecart"}, + }, +}) + +minetest.register_craft({ + output = "mcl_minecarts:chest_minecart", + recipe = { + {"mcl_chests:chest"}, + {"mcl_minecarts:minecart"}, + }, +}) + +minetest.register_craft({ + output = "mcl_minecarts:tnt_minecart", + recipe = { + {"mcl_tnt:tnt"}, + {"mcl_minecarts:minecart"}, + }, +}) + +minetest.register_craft({ + output = "mcl_minecarts:furnace_minecart", + recipe = { + {"mcl_furnaces:furnace"}, + {"mcl_minecarts:minecart"}, + }, +}) diff --git a/mods/ENTITIES/mcl_minecarts/models/mcl_minecarts_minecart_block.b3d b/mods/ENTITIES/mcl_minecarts/models/mcl_minecarts_minecart_block.b3d new file mode 100644 index 0000000000000000000000000000000000000000..211446bd4d005ac263e47f98961751f30aa836ad GIT binary patch literal 6323 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 WV_;w?Wnf?cjS7`BFff4lAT|K~^SSl_ literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mcl_minecarts/models/mcl_minecarts_minecart_hopper.b3d b/mods/ENTITIES/mcl_minecarts/models/mcl_minecarts_minecart_hopper.b3d new file mode 100644 index 0000000000000000000000000000000000000000..b6441f0615c9b7aa05ec1bd93222e0eb9aae3d32 GIT binary patch literal 10577 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 VAo&J+P`L^koCWbf#Vai*1OQ_go%#R( literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_chest.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_chest.png new file mode 100644 index 0000000000000000000000000000000000000000..451d8092099564797a0bd2d79827dce2af8652bd GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QUo+*2Mc1hPiZR`N_!0NJ>g(Cq(M#=qM{IZ+O1#Ap--0U`dc) zFayJXB*4JHAbTr5g@J*g%G1R$q=M16hdrsmfQMO@a}mS3+yD1(ODdlETr_@GCv(B9 z-!7H~E{4B0opav7BvpOyUZbr-Z|d!93-3+jV@SGw-e;{>7>7|o#J4pk_@`+7P+Yi~ zsX-&Pi!Yy|%ya{kIe`}LV@OpDd;e`8=^ OVDNPHb6Mw<&;$U%+-KbY literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_command_block.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_command_block.png new file mode 100644 index 0000000000000000000000000000000000000000..3b8d3d562433352260f7eeda66c661429e58f12e GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdsSyd_r6q7#KEfSUqpfbYnx8 zKzG-c#-{R;VjUeFWo2a<85vD&t82@AY;A2lJw4@a-tuE$U|=i>@(X5gcy=R=fq|ji z)5S5Qf-%{Fsi(=Si%FqvQ+IbD!-TY;AR!TM{e*-JQ!_I^zxf9a#BHnkzHY@iW}dgQ zvQI^2i`5Lyurv$v@}wU~sA3LSvgeV@^B!g%<7Lz3?F)rgq`A4e9{qT3G7nGr`*}O7 rpPyl2TcNjr*QQ)T;+&jA5i^7OY9mb*lWax?1_lOCS3j3^P6b1Rr3G; z|MGnswQg)l{8}$D&ph3V=kU=FQVc;iu3!GRf9b}T^_8B63qp*JIV!L$TEV_>@m%2> zk&;|*w{QOb@9V3>dl*`dtP!(kHu!(`&4w;pfosYO?nh*-Y<)Vy~5qDw9ff&*^M7;9M^7?ECXN2AKr4Z$eggGxKCOSSX!2RMYymq2b2W zUCk@ME?i_ekNZQB!Q_N13JLQXougeHPctqG)=Yi>WV_z^w9o$Q7Z@ttTA$;}zIfkV d&L7_TU#&m#)U{~&F)%PNc)I$ztaD0e0stm`cu4>N literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_hopper.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_minecart_hopper.png new file mode 100644 index 0000000000000000000000000000000000000000..f16a007f7b4bfe91a77a9c193585dc622446f351 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7Hha1_hEy;nZP>b1Rr3G; z|MGnswLX0L@`wNMvSrKuU;J6Y>(RmYpI>7tPZ0x4qr?wBp}d%%|G!_k=+kgk%GoAl z!lj^Txoh__)fvvH7nvRuG=X8?_qt@m3$haC=SJbo?ze=5CYK5C zoJSKIPVxz4Khu_xK5!(YvPq)W?xO9wY=xa2Hy^BUXpUg+p4KOo%F42B?T2+QqeR~C qYf7q4-?B+PO5)>DM!Wq5OuQz?U0XZvdonOEFnGH9xvXc13L9H^%T&zP9eCTjZ|U?XMJ89-eKMB+&aaz&@=RG~)HK$sPbzICcFhe7 zDHiL>#P1B0ilpUXO@geCxl CUSJOZ literal 0 HcmV?d00001 diff --git a/mods/MISC/mcl_wip/depends.txt b/mods/MISC/mcl_wip/depends.txt index d0752e8e..b2cb73f7 100644 --- a/mods/MISC/mcl_wip/depends.txt +++ b/mods/MISC/mcl_wip/depends.txt @@ -11,3 +11,4 @@ doc_identifier mobs_mc mcl_paintings mcl_comparators +mcl_minecarts diff --git a/mods/MISC/mcl_wip/init.lua b/mods/MISC/mcl_wip/init.lua index 22579d68..3bc7793d 100644 --- a/mods/MISC/mcl_wip/init.lua +++ b/mods/MISC/mcl_wip/init.lua @@ -17,6 +17,11 @@ local wip_items = { "mobs_mc:totem", "mcl_paintings:painting", "mcl_comparators:comparator_off_comp", + "mcl_minecarts:hopper_minecart", + "mcl_minecarts:command_block_minecart", + "mcl_minecarts:chest_minecart", + "mcl_minecarts:furnace_minecart", + "mcl_minecarts:tnt_minecart", } for i=1,#wip_items do diff --git a/tools/Texture_Conversion_Table.csv b/tools/Texture_Conversion_Table.csv index 1550d150..6eec745e 100644 --- a/tools/Texture_Conversion_Table.csv +++ b/tools/Texture_Conversion_Table.csv @@ -420,6 +420,11 @@ Source path,Source file,Target path,Target file,xs,ys,xl,yl,xt,yt /assets/minecraft/textures/blocks,rail_normal_turned.png,/mods/ITEMS/mcl_minecarts/textures,default_rail_curved.png,,,,,, /assets/minecraft/textures/blocks,rail_normal.png,/mods/ITEMS/mcl_minecarts/textures,default_rail.png,,,,,, /assets/minecraft/textures/items,minecart_normal.png,/mods/ITEMS/mcl_minecarts/textures,mcl_minecarts_minecart_normal.png,,,,,, +/assets/minecraft/textures/items,minecart_chest.png,/mods/ITEMS/mcl_minecarts/textures,mcl_minecarts_minecart_chest.png,,,,,, +/assets/minecraft/textures/items,minecart_tnt.png,/mods/ITEMS/mcl_minecarts/textures,mcl_minecarts_minecart_tnt.png,,,,,, +/assets/minecraft/textures/items,minecart_command_block.png,/mods/ITEMS/mcl_minecarts/textures,mcl_minecarts_minecart_command_block.png,,,,,, +/assets/minecraft/textures/items,minecart_furnace.png,/mods/ITEMS/mcl_minecarts/textures,mcl_minecarts_minecart_furnace.png,,,,,, +/assets/minecraft/textures/items,minecart_hopper.png,/mods/ITEMS/mcl_minecarts/textures,mcl_minecarts_minecart_hopper.png,,,,,, /assets/minecraft/textures/blocks,rail_detector.png,/mods/ITEMS/mcl_minecarts/textures,rail_detector.png,,,,,, /assets/minecraft/textures/blocks,rail_detector_powered.png,/mods/ITEMS/mcl_minecarts/textures,rail_detector_powered.png,,,,,, /assets/minecraft/textures/blocks,rail_golden_powered.png,/mods/ITEMS/mcl_minecarts/textures,rail_golden_powered.png,,,,,,