diff --git a/init.lua b/init.lua index 6b5dba2..95a6650 100644 --- a/init.lua +++ b/init.lua @@ -1,6 +1,6 @@ -- ANTI GRIEF by rnd -- Copyright 2016 rnd --- modified by SaKeL for Survival X Server +-- modified by SaKeL for Survival X Server ---------------------------------------------------------------------------- -- This program is free software: you can redistribute it and/or modify @@ -29,13 +29,13 @@ function prevent_place_above(name) local old_on_place = minetest.registered_craftitems[name] -- on_place local old_after_place_node = minetest.registered_nodes[name] --after_place_node --after_place_node = func(pos, placer, itemstack, pointed_thing) - + if old_on_place and old_on_place.on_place then old_on_place = old_on_place.on_place minetest.registered_craftitems[name].on_place = function(itemstack, placer, pointed_thing) - + local pos = pointed_thing.above local placer_name = placer:get_player_name() local item_name = string.split(itemstack:get_name(), ":")[2] @@ -61,14 +61,14 @@ function prevent_place_above(name) if old_after_place_node then old_after_place_node = old_after_place_node.after_place_node - + local table = minetest.registered_nodes[name] local table2 = {} - + for i,v in pairs(table) do table2[i] = v end - + table2.after_place_node = function(pos, placer, itemstack, pointed_thing) --after_place_node = func(pos, placer, itemstack, pointed_thing) @@ -97,11 +97,54 @@ function prevent_place_above(name) minetest.register_node(":"..name, table2) return - end - + end + return end - + +-- prevent TNT explosion +minetest.after(0, function () + local old_on_timer = minetest.registered_nodes["tnt:tnt_burning"] + + if old_on_timer and old_on_timer.on_timer then + old_on_timer = old_on_timer.on_timer + + minetest.registered_nodes["tnt:tnt_burning"].on_timer = function(pos, elapsed) + + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + + if not owner then + owner = "" + end + + if pos.y > -150 and owner ~= "ADMIN" and owner ~= "SaKeL" then + minetest.sound_play("antigrief_fart", {pos = pos, gain = 1.5, max_hear_distance = 2*64}) + minetest.remove_node(pos) + + -- add effect + minetest.add_particlespawner({ + amount = 64, + time = 0.5, + minpos = vector.subtract(pos, 1 / 2), + maxpos = vector.add(pos, 1 / 2), + minvel = {x = -10, y = -10, z = -10}, + maxvel = {x = 10, y = 10, z = 10}, + minacc = vector.new(), + maxacc = vector.new(), + minexptime = 1, + maxexptime = 2.5, + minsize = 1 * 3, + maxsize = 1 * 5, + texture = "tnt_smoke.png", + }) + else + return old_on_timer(pos, elapsed) + end + + end + end +end) minetest.after(0, function () prevent_place_above("bucket:bucket_water") diff --git a/sounds/antigrief_fart.1.ogg b/sounds/antigrief_fart.1.ogg new file mode 100644 index 0000000..457d8a0 Binary files /dev/null and b/sounds/antigrief_fart.1.ogg differ