Advertisement
Guest User

MINETEST ANTIFRIEF

a guest
Mar 31st, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.51 KB | None | 0 0
  1. -- ANTI GRIEF by rnd
  2. -- Copyright 2016 rnd
  3. --Edited by maikerumine for TNT
  4.  
  5. ----------------------------------------------------------------------------
  6. -- This program is free software: you can redistribute it and/or modify
  7. -- it under the terms of the GNU General Public License as published by
  8. -- the Free Software Foundation, either version 3 of the License, or
  9. -- (at your option) any later version.
  10.  
  11. -- This program is distributed in the hope that it will be useful,
  12. -- but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. -- GNU General Public License for more details.
  15.  
  16. -- You should have received a copy of the GNU General Public License
  17. -- along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18. ----------------------------------------------------------------------------
  19.  
  20. --TNT only below 150!
  21.  
  22. -- expose api
  23. anrifrief = {}
  24. anrifrief.range = 10
  25. anrifrief.timer = 10
  26. anrifrief.mode = {}
  27.  
  28.  
  29. function no_tnt_above(name)
  30.  
  31.     local tnt_on_place=minetest.registered_craftitems[name];--.on_place;
  32.     local tnt_after_place_node = minetest.registered_nodes[name];--.after_place_node;
  33.     --after_place_node = func(pos, placer, itemstack, pointed_thing)
  34.    
  35.     if tnt_on_place and tnt_on_place.on_place then
  36.         tnt_on_place=tnt_on_place.on_place;
  37.         minetest.registered_craftitems[name].on_place=function(itemstack, placer, pointed_thing)
  38.             local pos = pointed_thing.above
  39.             if pos.y>-150 then
  40.                 minetest.log("action","ANTI GRIEF " .. placer:get_player_name() .. " tried to place " .. name .. " at " .. minetest.pos_to_string(pos));
  41.                 return itemstack
  42.             else
  43.                 --return tnt_on_place(itemstack, placer, pointed_thing)
  44.             end
  45.         end
  46.     return;
  47.     end
  48.  
  49.     if tnt_after_place_node then
  50.  
  51.         tntafter_place_node=tnt_after_place_node.after_place_node
  52.        
  53.         local table = minetest.registered_nodes[name];
  54.         local table2 = {}
  55.         for i,v in pairs(table) do
  56.             table2[i] = v
  57.         end
  58.        
  59.         table2.after_place_node=function(pos, placer, itemstack, pointed_thing)
  60.             --after_place_node = func(pos, placer, itemstack, pointed_thing)
  61.             local pos = pointed_thing.above
  62.             if pos.y>-150 then
  63.                 minetest.log("action","ANTI GRIEF " .. placer:get_player_name() .. " tried to place " .. name .. " at " .. minetest.pos_to_string(pos));
  64.                 minetest.set_node(pos, {name = "air"});
  65.                 --return itemstack
  66.             end
  67.         end
  68.        
  69.        
  70.         minetest.register_node(":"..name, table2)
  71.         return;
  72.     end
  73.    
  74.        
  75.     return;
  76. end
  77.    
  78.  
  79. minetest.after(0,
  80.     function ()
  81.      no_tnt_above("tnt:tnt");
  82.     end)
  83.  
  84. -- old version
  85. --[[
  86. --everamaza code
  87. minetest.register_privilege("liquid", "Can place liquid source nodes.")
  88. minetest.register_privilege("lava", "Can use liquid igniters.")
  89. minetest.register_privilege("water", "Can use liquid.")
  90.  
  91.  
  92. --lava bucket
  93. local old_lava_bucket_place = minetest.registered_items["bucket:bucket_lava"].on_place
  94.  
  95. minetest.override_item("bucket:bucket_lava", {
  96.     on_place = function(itemstack, placer, pointed_thing)
  97.         if not minetest.check_player_privs(placer:get_player_name(),
  98.                 {lava = true}) then
  99.             return itemstack
  100.         else
  101.             return old_lava_bucket_place(itemstack, placer, pointed_thing)
  102.         end
  103.     end,
  104. })
  105.  
  106.  
  107. --water bucket
  108. local old_water_bucket_place = minetest.registered_items["bucket:bucket_water"].on_place
  109.  
  110. minetest.override_item("bucket:bucket_water", {
  111.     on_place = function(itemstack, placer, pointed_thing)
  112.         if not minetest.check_player_privs(placer:get_player_name(),
  113.                 {water = true}) then
  114.             return itemstack
  115.         else
  116.             return old_water_bucket_place(itemstack, placer, pointed_thing)
  117.         end
  118.     end,
  119. })
  120.  
  121. --source blocks
  122. minetest.override_item("default:lava_source", {
  123.     after_place_node = function(pos, placer, itemstack, pointed_thing)
  124.         if not minetest.check_player_privs(placer:get_player_name(),
  125.                 {liquid = true, lava = true}) then
  126.             minetest.remove_node(pos)
  127.         end
  128.     end,
  129. })
  130.  
  131. minetest.override_item("default:water_source", {
  132.     after_place_node = function(pos, placer, itemstack, pointed_thing)
  133.         if not minetest.check_player_privs(placer:get_player_name(),
  134.                 {liquid = true}) then
  135.             minetest.remove_node(pos)
  136.         end
  137.     end,
  138. })
  139.  
  140. minetest.override_item("default:river_water_source", {
  141.     after_place_node = function(pos, placer, itemstack, pointed_thing)
  142.         if not minetest.check_player_privs(placer:get_player_name(),
  143.                 {liquid = true}) then
  144.             minetest.remove_node(pos)
  145.         end
  146.     end,
  147. })]]
  148.  
  149. -- replace lava_source to stone with anrifrief
  150. anrifrief.replace = function(player_pos)
  151.     local pos = minetest.env:find_node_near(player_pos, anrifrief.range, "default:st".."one")
  152.     while pos~= nil do
  153.         minetest.env:add_node(pos,{name="default:lava_source"})
  154.         pos = minetest.env:find_node_near(player_pos, anrifrief.range, "default:st".."one")
  155.     end
  156. end
  157.  
  158. -- register_chatcommand
  159. minetest.register_chatcommand("anrifrief", {
  160.     params = "<mode>",
  161.     description = "Enable anrifrief-system EXTRA",
  162.     privs = {shout=true},  
  163.     func = function(name, param)
  164.         if param == 'on'  then anrifrief.mode[name]=1
  165.           minetest.chat_send_player(name, "anrifrief turned on.")
  166.         end
  167.     end,
  168. })
  169.  
  170. -- register_globalstep - replace default:lava_source to default:stone in range of players with anrifrief
  171. minetest.register_globalstep(function(dtime)
  172.     for _,player in ipairs(minetest.get_connected_players()) do
  173.         local pos = player:getpos()
  174.         if anrifrief.mode[player:get_player_name()] == 1 then
  175.             anrifrief.replace(pos)
  176.         end
  177.     end
  178. end)
  179.  
  180. for _,player in ipairs(minetest.get_connected_players()) do
  181.     anrifrief.mode[player:get_player_name()]=1
  182. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement