snowballs
parent
24b684ca39
commit
c95e292e20
|
@ -136,7 +136,10 @@ function boat.on_punch(self, puncher)
|
||||||
end
|
end
|
||||||
if not self.driver then
|
if not self.driver then
|
||||||
self.removed = true
|
self.removed = true
|
||||||
if not (creative and creative.is_enabled_for
|
local inv = puncher:get_inventory()
|
||||||
|
if not inv then
|
||||||
|
minetest.add_item(self.object:get_pos(), "boats:boat")
|
||||||
|
elseif not (creative and creative.is_enabled_for
|
||||||
and creative.is_enabled_for(name))
|
and creative.is_enabled_for(name))
|
||||||
or not inv:contains_item("main", "boats:boat") then
|
or not inv:contains_item("main", "boats:boat") then
|
||||||
local leftover = inv:add_item("main", "boats:boat")
|
local leftover = inv:add_item("main", "boats:boat")
|
||||||
|
@ -341,4 +344,4 @@ minetest.register_craft({
|
||||||
type = "fuel",
|
type = "fuel",
|
||||||
recipe = "boats:boat",
|
recipe = "boats:boat",
|
||||||
burntime = 20,
|
burntime = 20,
|
||||||
})
|
})
|
||||||
|
|
|
@ -2,6 +2,7 @@ local player_inventory = {}
|
||||||
local inventory_cache = {}
|
local inventory_cache = {}
|
||||||
|
|
||||||
local ofs = {}
|
local ofs = {}
|
||||||
|
local ofy = {}
|
||||||
local hoch = {}
|
local hoch = {}
|
||||||
local bg = {}
|
local bg = {}
|
||||||
|
|
||||||
|
@ -18,6 +19,19 @@ ofs["brew"] = {x=4.78, y=8.12}
|
||||||
ofs["matr"] = {x=3.495, y=8.12}
|
ofs["matr"] = {x=3.495, y=8.12}
|
||||||
ofs["inv"] = {x=8.99, y=8.12}
|
ofs["inv"] = {x=8.99, y=8.12}
|
||||||
|
|
||||||
|
ofy["blocks"] = 0.24
|
||||||
|
ofy["deco"] = 0.24
|
||||||
|
ofy["mese"] = 0.24
|
||||||
|
ofy["rail"] = 0.24
|
||||||
|
ofy["misc"] = 0.24
|
||||||
|
ofy["all"] = 0.24
|
||||||
|
ofy["food"] = 0.14
|
||||||
|
ofy["tools"] = 0.14
|
||||||
|
ofy["combat"] = 0.14
|
||||||
|
ofy["brew"] = 0.14
|
||||||
|
ofy["matr"] = 0.14
|
||||||
|
ofy["inv"] = 0.14
|
||||||
|
|
||||||
hoch["blocks"] = ""
|
hoch["blocks"] = ""
|
||||||
hoch["deco"] = ""
|
hoch["deco"] = ""
|
||||||
hoch["mese"] = ""
|
hoch["mese"] = ""
|
||||||
|
@ -32,15 +46,15 @@ hoch["matr"] = "^[transformfy"
|
||||||
hoch["inv"] = "^[transformfy"
|
hoch["inv"] = "^[transformfy"
|
||||||
|
|
||||||
bg["blocks"] = "default_grass_side.png"
|
bg["blocks"] = "default_grass_side.png"
|
||||||
bg["deco"] = "default_sapling.png"
|
bg["deco"] = "creative_deko.png"
|
||||||
bg["mese"] = "jeija_lightstone_gray_on.png"
|
bg["mese"] = "creative_mese.png"
|
||||||
bg["rail"] = "boats_inventory.png"
|
bg["rail"] = "boats_inventory.png"
|
||||||
bg["misc"] = "bucket_water.png"
|
bg["misc"] = "bucket_water.png"
|
||||||
bg["all"] = "creative_all.png"
|
bg["all"] = "creative_all.png"
|
||||||
bg["food"] = "creative_food.png"
|
bg["food"] = "creative_food.png"
|
||||||
bg["tools"] = "default_tool_diamondpick.png"
|
bg["tools"] = "creative_tool.png"
|
||||||
bg["combat"] = "default_tool_steelsword.png"
|
bg["combat"] = "creative_sword.png"
|
||||||
bg["brew"] = "potions_bottle.png"
|
bg["brew"] = "creative_brew.png"
|
||||||
bg["matr"] = "default_emerald.png"
|
bg["matr"] = "default_emerald.png"
|
||||||
bg["inv"] = "creative_inv.png"
|
bg["inv"] = "creative_inv.png"
|
||||||
|
|
||||||
|
@ -153,6 +167,7 @@ creative.formspec_add = ""
|
||||||
|
|
||||||
local function get_creative_formspec(player_name, start_i, pagenum, page, pagemax)
|
local function get_creative_formspec(player_name, start_i, pagenum, page, pagemax)
|
||||||
pagenum = math.floor(pagenum) or 1
|
pagenum = math.floor(pagenum) or 1
|
||||||
|
pagemax = (pagemax and pagemax ~= 0) and pagemax or 1
|
||||||
local slider_height = 4 / pagemax
|
local slider_height = 4 / pagemax
|
||||||
local slider_pos = slider_height * (pagenum - 1) + 2.2
|
local slider_pos = slider_height * (pagenum - 1) + 2.2
|
||||||
local formspec = ""
|
local formspec = ""
|
||||||
|
@ -193,7 +208,7 @@ local function get_creative_formspec(player_name, start_i, pagenum, page, pagema
|
||||||
"image_button[9.19,8.28;1,1;"..bg["inv"]..";inv;;;false]".. --inventory
|
"image_button[9.19,8.28;1,1;"..bg["inv"]..";inv;;;false]".. --inventory
|
||||||
"list[detached:creative_trash;main;9.02,7.02;1,1;]"..
|
"list[detached:creative_trash;main;9.02,7.02;1,1;]"..
|
||||||
"image["..ofs[name].x..", "..ofs[name].y..";1.5,1.44;creative_active.png"..hoch[name].."]"..
|
"image["..ofs[name].x..", "..ofs[name].y..";1.5,1.44;creative_active.png"..hoch[name].."]"..
|
||||||
"image["..(ofs[name].x + 0.17)..", "..(ofs[name].y + 0.14)..";1,1;"..bg[name].."]"..
|
"image["..(ofs[name].x + 0.17)..", "..(ofs[name].y + ofy[name])..";1,1;"..bg[name].."]"..
|
||||||
"image[9.04," .. tostring(slider_pos) .. ";0.78,"..tostring(slider_height) .. ";creative_slider.png]"
|
"image[9.04," .. tostring(slider_pos) .. ";0.78,"..tostring(slider_height) .. ";creative_slider.png]"
|
||||||
|
|
||||||
if name == "all" then
|
if name == "all" then
|
||||||
|
|
|
@ -555,40 +555,114 @@ minetest.register_abm({
|
||||||
--
|
--
|
||||||
-- Snowballs
|
-- Snowballs
|
||||||
--
|
--
|
||||||
--[[
|
|
||||||
-- Shoot snowball
|
-- Shoot snowball
|
||||||
snow_shoot_snowball = function (item, player, pointed_thing)
|
snow_shoot_snowball = function (item, player, pointed_thing)
|
||||||
local playerpos = player:get_pos()
|
local pos = player:get_pos()
|
||||||
local obj = minetest.add_entity({x = playerpos.x, y = playerpos.y + 1.5, z = playerpos.z}, "default:snowball_entity")
|
local obj = minetest.add_entity({x=pos.x, y=pos.y + 1.5, z=pos.z},
|
||||||
local dir = player:get_look_dir()
|
"default:snowball_entity")
|
||||||
obj:setvelocity({x = dir.x * 19, y = dir.y * 19, z = dir.z * 19})
|
if obj then
|
||||||
obj:set_acceleration({x = dir.x * -3, y = -9.81, z = dir.z * -3})
|
local ent = obj:get_luaentity()
|
||||||
item:take_item()
|
if ent then
|
||||||
|
ent.thrower = player:get_player_name()
|
||||||
|
local dir = player:get_look_dir()
|
||||||
|
obj:setvelocity({x = dir.x * 19, y = dir.y * 19, z = dir.z * 19})
|
||||||
|
obj:set_acceleration({x = dir.x * -3, y = -9.81, z = dir.z * -3})
|
||||||
|
item:take_item()
|
||||||
|
else
|
||||||
|
obj:remove()
|
||||||
|
end
|
||||||
|
end
|
||||||
return item
|
return item
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Snowball entity
|
-- Snowball entity
|
||||||
snowball_ENTITY = {
|
local snowball_entity = {
|
||||||
physical = false,
|
physical = false,
|
||||||
textures = "default_snowball.png",
|
textures = {
|
||||||
lastpos = "",
|
"default_snow.png",
|
||||||
collisionbox = {0,0,0,0,0,0},
|
"default_snow.png",
|
||||||
|
"default_snow.png",
|
||||||
|
"default_snow.png",
|
||||||
|
"default_snow.png",
|
||||||
|
"default_snow.png",
|
||||||
|
},
|
||||||
|
visual = "cube",
|
||||||
|
visual_size = {x=0.25, y=0.25},
|
||||||
|
thrower = nil,
|
||||||
|
timer = 0,
|
||||||
|
lastpos = {},
|
||||||
|
collisionbox = {0,0,0, 0,0,0},
|
||||||
|
on_activate = function(self, staticdata)
|
||||||
|
if staticdata == "expired" then
|
||||||
|
self.object:remove()
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
get_staticdata = function()
|
||||||
|
return "expired"
|
||||||
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Called when snowball is moving.
|
-- Called when snowball is moving.
|
||||||
snowball_ENTITY.on_step = function(self)
|
snowball_entity.on_step = function(self, dtime)
|
||||||
|
self.timer = self.timer + dtime
|
||||||
|
if self.timer > 20 then
|
||||||
|
self.object:remove()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not self.thrower then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local drop_pos = nil
|
||||||
local pos = self.object:getpos()
|
local pos = self.object:getpos()
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
|
local objs = minetest.get_objects_inside_radius({x=pos.x, y=pos.y, z=pos.z}, 1)
|
||||||
-- Become item when hitting a node.
|
for _, obj in pairs(objs) do
|
||||||
-- If there is no lastpos for some reason.
|
if obj:is_player() then
|
||||||
if self.lastpos.x ~= nil then
|
local name = obj:get_player_name()
|
||||||
if node.name ~= "air" then
|
if name ~= self.thrower then
|
||||||
self.object:remove()
|
drop_pos = obj:getpos()
|
||||||
|
end
|
||||||
|
elseif obj:get_luaentity() ~= nil and
|
||||||
|
obj:get_luaentity().name ~= "default:snowball_entity" then
|
||||||
|
drop_pos = obj:getpos()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- Node will be added at last pos outside the node
|
if node.name ~= "air" and node.name ~= "ignore" then
|
||||||
self.lastpos = {x = pos.x, y = pos.y, z = pos.z}
|
for i = 1, 3 do
|
||||||
|
local p = {x=pos.x, y=pos.y + i, z=pos.z}
|
||||||
|
local n = minetest.get_node(p)
|
||||||
|
if n.name == "air" then
|
||||||
|
drop_pos = vector.new(p)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if not drop_pos then
|
||||||
|
self.object:remove()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if drop_pos then
|
||||||
|
node = minetest.get_node(drop_pos)
|
||||||
|
if node.name == "air" then
|
||||||
|
local pos_under = vector.subtract(drop_pos, {x=0, y=1, z=0})
|
||||||
|
node = minetest.get_node(pos_under)
|
||||||
|
if node.name then
|
||||||
|
local def = minetest.registered_items[node.name] or {}
|
||||||
|
if def.buildable_to == true then
|
||||||
|
minetest.add_node(pos_under, {name="default:snow"})
|
||||||
|
elseif def.walkable == true then
|
||||||
|
minetest.add_node(drop_pos, {name="default:snow"})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
elseif node.name then
|
||||||
|
local def = minetest.registered_items[node.name]
|
||||||
|
if def and def.buildable_to == true then
|
||||||
|
minetest.add_node(drop_pos, {name="default:snow"})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
self.object:remove()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_entity("default:snowball_entity", snowball_entity)]]--
|
minetest.register_entity("default:snowball_entity", snowball_entity)
|
||||||
|
|
Loading…
Reference in New Issue