snowballs
parent
24b684ca39
commit
c95e292e20
|
@ -136,7 +136,10 @@ function boat.on_punch(self, puncher)
|
|||
end
|
||||
if not self.driver then
|
||||
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))
|
||||
or not inv:contains_item("main", "boats:boat") then
|
||||
local leftover = inv:add_item("main", "boats:boat")
|
||||
|
@ -341,4 +344,4 @@ minetest.register_craft({
|
|||
type = "fuel",
|
||||
recipe = "boats:boat",
|
||||
burntime = 20,
|
||||
})
|
||||
})
|
||||
|
|
|
@ -2,6 +2,7 @@ local player_inventory = {}
|
|||
local inventory_cache = {}
|
||||
|
||||
local ofs = {}
|
||||
local ofy = {}
|
||||
local hoch = {}
|
||||
local bg = {}
|
||||
|
||||
|
@ -18,6 +19,19 @@ ofs["brew"] = {x=4.78, y=8.12}
|
|||
ofs["matr"] = {x=3.495, 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["deco"] = ""
|
||||
hoch["mese"] = ""
|
||||
|
@ -32,15 +46,15 @@ hoch["matr"] = "^[transformfy"
|
|||
hoch["inv"] = "^[transformfy"
|
||||
|
||||
bg["blocks"] = "default_grass_side.png"
|
||||
bg["deco"] = "default_sapling.png"
|
||||
bg["mese"] = "jeija_lightstone_gray_on.png"
|
||||
bg["deco"] = "creative_deko.png"
|
||||
bg["mese"] = "creative_mese.png"
|
||||
bg["rail"] = "boats_inventory.png"
|
||||
bg["misc"] = "bucket_water.png"
|
||||
bg["all"] = "creative_all.png"
|
||||
bg["food"] = "creative_food.png"
|
||||
bg["tools"] = "default_tool_diamondpick.png"
|
||||
bg["combat"] = "default_tool_steelsword.png"
|
||||
bg["brew"] = "potions_bottle.png"
|
||||
bg["tools"] = "creative_tool.png"
|
||||
bg["combat"] = "creative_sword.png"
|
||||
bg["brew"] = "creative_brew.png"
|
||||
bg["matr"] = "default_emerald.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)
|
||||
pagenum = math.floor(pagenum) or 1
|
||||
pagemax = (pagemax and pagemax ~= 0) and pagemax or 1
|
||||
local slider_height = 4 / pagemax
|
||||
local slider_pos = slider_height * (pagenum - 1) + 2.2
|
||||
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
|
||||
"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 + 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]"
|
||||
|
||||
if name == "all" then
|
||||
|
|
|
@ -555,40 +555,114 @@ minetest.register_abm({
|
|||
--
|
||||
-- Snowballs
|
||||
--
|
||||
--[[
|
||||
|
||||
-- Shoot snowball
|
||||
snow_shoot_snowball = function (item, player, pointed_thing)
|
||||
local playerpos = player:get_pos()
|
||||
local obj = minetest.add_entity({x = playerpos.x, y = playerpos.y + 1.5, z = playerpos.z}, "default:snowball_entity")
|
||||
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()
|
||||
local pos = player:get_pos()
|
||||
local obj = minetest.add_entity({x=pos.x, y=pos.y + 1.5, z=pos.z},
|
||||
"default:snowball_entity")
|
||||
if obj then
|
||||
local ent = obj:get_luaentity()
|
||||
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
|
||||
end
|
||||
|
||||
-- Snowball entity
|
||||
snowball_ENTITY = {
|
||||
local snowball_entity = {
|
||||
physical = false,
|
||||
textures = "default_snowball.png",
|
||||
lastpos = "",
|
||||
collisionbox = {0,0,0,0,0,0},
|
||||
textures = {
|
||||
"default_snow.png",
|
||||
"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.
|
||||
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 node = minetest.get_node(pos)
|
||||
|
||||
-- Become item when hitting a node.
|
||||
-- If there is no lastpos for some reason.
|
||||
if self.lastpos.x ~= nil then
|
||||
if node.name ~= "air" then
|
||||
self.object:remove()
|
||||
local objs = minetest.get_objects_inside_radius({x=pos.x, y=pos.y, z=pos.z}, 1)
|
||||
for _, obj in pairs(objs) do
|
||||
if obj:is_player() then
|
||||
local name = obj:get_player_name()
|
||||
if name ~= self.thrower then
|
||||
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
|
||||
-- Node will be added at last pos outside the node
|
||||
self.lastpos = {x = pos.x, y = pos.y, z = pos.z}
|
||||
if node.name ~= "air" and node.name ~= "ignore" then
|
||||
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
|
||||
|
||||
minetest.register_entity("default:snowball_entity", snowball_entity)]]--
|
||||
minetest.register_entity("default:snowball_entity", snowball_entity)
|
||||
|
|
Loading…
Reference in New Issue