summaryrefslogtreecommitdiff
path: root/land_title_register.lua
blob: fa41bc61359a2bc4a1fd7ff4c4dfd13c6082827e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139




markers.get_area_info = function(pos)
   local found = {}
   for nr, area in pairs(areas.areas) do
      if pos.x >= area.pos1.x and pos.x <= area.pos2.x and
         pos.y >= area.pos1.y and pos.y <= area.pos2.y and
         pos.z >= area.pos1.z and pos.z <= area.pos2.z then
              area[ 'id' ] = nr;
              table.insert( found, area )
      end
   end
   return found;
end



markers.get_area_info_as_text = function(pos, name)

   local text = 'Checking '..minetest.pos_to_string( pos )..'. Owned by: ';

   local found_areas = markers.get_area_info( pos );
--minetest.chat_send_player('singleplayer', 'Areas FOUND: '..minetest.serialize( found_areas ));

   if( not( found_areas ) or #found_areas < 1 ) then
      minetest.chat_send_player( name, text..'-nobody- (unprotected)');
      return;
   end

   local parent = {};
   for _, area in pairs( found_areas ) do
      if( not( area[ 'parent' ] )) then 
         parent = area;
         minetest.chat_send_player(name, '  '..areas:toString( area['id']))
      end
   end

   if( #found_areas > 1 ) then
      minetest.chat_send_player(name, '  Sub-owners of entire area:');
   
      for _, area in pairs( found_areas ) do
         if( area[ 'parent' ]==parent['nr'] ) then
            if(  parent.pos1.x == area.pos1.x
             and parent.pos1.y == area.pos1.y
             and parent.pos1.z == area.pos1.z
             and parent.pos2.x == area.pos2.x
             and parent.pos2.y == area.pos2.y
             and parent.pos2.z == area.pos2.z) then 

               minetest.chat_send_player(name, '    '..areas:toString( area['id']))
            end    
         end
      end
   end


   if( #found_areas > 1 ) then
      minetest.chat_send_player(name, '  Sub-owners:');
   
      for _, area in pairs( found_areas ) do
         if( area[ 'parent' ] ) then 
            minetest.chat_send_player(name, '    '..areas:toString( area['id']))
         end
      end
   end

    minetest.chat_send_player(name, 'ALL owners:');
   for _, area in pairs( found_areas ) do
      minetest.chat_send_player(name, '    '..areas:toString( area['id']))
   end
end


minetest.register_tool( "markers:land_title_register",
{
    description = "Land title register. Left-click with it to get information about the land owner or to protect your own ground.",
    groups = {}, 
    inventory_image = "default_book.png", -- TODO
    wield_image = "",
    wield_scale = {x=1,y=1,z=1},
    stack_max = 1, -- there is no need to have more than one
    liquids_pointable = true, -- ground with only water on can be owned as well
    -- the tool_capabilities are completely irrelevant here - no need to dig
    tool_capabilities = {
        full_punch_interval = 1.0,
        max_drop_level=0,
        groupcaps={
            fleshy={times={[2]=0.80, [3]=0.40}, maxwear=0.05, maxlevel=1},
            snappy={times={[2]=0.80, [3]=0.40}, maxwear=0.05, maxlevel=1},
            choppy={times={[3]=0.90}, maxwear=0.05, maxlevel=0}
        }
    },
    node_placement_prediction = nil,

    on_place = function(itemstack, placer, pointed_thing)

       if( placer == nil or pointed_thing == nil) then
          return itemstack; -- nothing consumed
       end
       local name = placer:get_player_name();

       -- the position is what we're actually looking for
       local pos  = minetest.get_pointed_thing_position( pointed_thing, 0 ); --under );
       
       if( not( pos ) or not( pos.x )) then
          minetest.chat_send_player( name, "Position not found.");
          return;
       end

       local found_areas = markers.get_area_info_as_text( pos, placer:get_player_name() );
-- TODO
--       inspector.search_node( pos.x, pos.y, pos.z, name );
       return itemstack; -- nothing consumed, nothing changed
    end,
     

    on_use = function(itemstack, placer, pointed_thing)

       if( placer == nil or pointed_thing == nil) then
          return itemstack; -- nothing consumed
       end
       local name = placer:get_player_name();

       local pos  = minetest.get_pointed_thing_position( pointed_thing, under );
       
       if( not( pos ) or not( pos.x )) then
          minetest.chat_send_player( name, "Position not found.");
          return;
       end
-- TODO
--       inspector.search_node( pos.x, pos.y, pos.z, name );
       local found_areas = markers.get_area_info_as_text( pos, placer:get_player_name() );

       return itemstack; -- nothing consumed, nothing changed
    end,
})