poikilos
8 years ago
committed by
Jacob Gustafson
9 changed files with 61379 additions and 4 deletions
@ -0,0 +1,21 @@ |
|||||
|
Minetest mod: orespawner_to_junk |
||||
|
========================================== |
||||
|
A full fork is planned with a minetest configuration option to disable spawners to prevent this issue in the first place |
||||
|
(however, this mod is helpful when the ore generators already exist in the world). |
||||
|
Ore generation (from spawners mod) is not good for multiplayer balance so there should be an option to turn it off. |
||||
|
You must also remove the lines from spawners/spawners_ores.lua |
||||
|
(see spawners-microfork for version with this done already) |
||||
|
|
||||
|
|
||||
|
|
||||
|
Code: LGPLv2.1, assets: CC BY-SA 3.0 Unported |
||||
|
|
||||
|
Mod dependencies: default, slimenodes |
||||
|
|
||||
|
Authors of source code |
||||
|
---------------------- |
||||
|
expertmm (github.com/expertmm) |
||||
|
|
||||
|
Authors of media (textures) |
||||
|
--------------------------- |
||||
|
(no media) |
File diff suppressed because it is too large
@ -0,0 +1,3 @@ |
|||||
|
default |
||||
|
slimenodes |
||||
|
|
@ -0,0 +1,16 @@ |
|||||
|
-- Copyright 2017 expertmm (GNU GPL v2.1 license) |
||||
|
|
||||
|
-- minetest.register_alias(name, convert_to) |
||||
|
-- "This means that if the engine finds nodes with the name name in the world the node with the name convert_to is used instead. " |
||||
|
-- <https://dev.minetest.net/minetest.register_alias> |
||||
|
minetest.register_alias("spawners:stone_with_gold_spawner", "slimenodes:slime_liquid_cyan") |
||||
|
minetest.register_alias("spawners:stone_with_iron_spawner", "slimenodes:slime_liquid_cyan") |
||||
|
minetest.register_alias("spawners:stone_with_copper_spawner", "slimenodes:slime_liquid_cyan") |
||||
|
|
||||
|
minetest.register_alias("spawners:stone_with_gold_spawner_active", "slimenodes:slime_liquid_cyan") |
||||
|
minetest.register_alias("spawners:stone_with_iron_spawner_active", "slimenodes:slime_liquid_cyan") |
||||
|
minetest.register_alias("spawners:stone_with_copper_spawner_active", "slimenodes:slime_liquid_cyan") |
||||
|
|
||||
|
minetest.register_alias("spawners:stone_with_gold_spawner_waiting", "slimenodes:slime_liquid_cyan") |
||||
|
minetest.register_alias("spawners:stone_with_iron_spawner_waiting", "slimenodes:slime_liquid_cyan") |
||||
|
minetest.register_alias("spawners:stone_with_copper_spawner_waiting", "slimenodes:slime_liquid_cyan") |
@ -0,0 +1 @@ |
|||||
|
settings.txt |
@ -0,0 +1,335 @@ |
|||||
|
-- Formspecs |
||||
|
local ore_formspec = |
||||
|
"size[8,8.5]".. |
||||
|
default.gui_bg.. |
||||
|
default.gui_bg_img.. |
||||
|
default.gui_slots.. |
||||
|
"label[2,1.7;Input Ingot]".. |
||||
|
"list[current_name;fuel;3.5,1.5;1,1;]".. |
||||
|
"list[current_player;main;0,4.25;8,1;]".. |
||||
|
"list[current_player;main;0,5.5;8,3;8]".. |
||||
|
"button_exit[5,1.5;2,1;exit;Save]".. |
||||
|
"listring[current_name;fuel]".. |
||||
|
"listring[current_player;main]".. |
||||
|
default.get_hotbar_bg(0, 4.25) |
||||
|
|
||||
|
function spawners.get_formspec(pos) |
||||
|
|
||||
|
-- Inizialize metadata |
||||
|
local meta = minetest.get_meta(pos) |
||||
|
|
||||
|
-- Inizialize inventory |
||||
|
local inv = meta:get_inventory() |
||||
|
for listname, size in pairs({ |
||||
|
fuel = 1, |
||||
|
}) do |
||||
|
if inv:get_size(listname) ~= size then |
||||
|
inv:set_size(listname, size) |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
-- Update formspec, infotext and node |
||||
|
meta:set_string("formspec", ore_formspec) |
||||
|
end |
||||
|
|
||||
|
local function can_dig(pos, player) |
||||
|
local meta = minetest.get_meta(pos); |
||||
|
local inv = meta:get_inventory() |
||||
|
return inv:is_empty("fuel") |
||||
|
end |
||||
|
|
||||
|
local function allow_metadata_inventory_put(pos, listname, index, stack, player) |
||||
|
if minetest.is_protected(pos, player:get_player_name()) then |
||||
|
minetest.record_protection_violation(pos, player:get_player_name()) |
||||
|
return |
||||
|
end |
||||
|
local meta = minetest.get_meta(pos) |
||||
|
local inv = meta:get_inventory() |
||||
|
local ingot = minetest.get_node_or_nil(pos).name |
||||
|
|
||||
|
ingot = string.split(ingot, ":") |
||||
|
ingot = string.split(ingot[2], "_") |
||||
|
|
||||
|
if ingot[3] == "iron" then |
||||
|
ingot[3] = "steel" |
||||
|
end |
||||
|
|
||||
|
if stack:get_name() == "default:"..ingot[3].."_ingot" then |
||||
|
return stack:get_count() |
||||
|
else |
||||
|
return 0 |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
local function allow_metadata_inventory_take(pos, listname, index, stack, player) |
||||
|
if minetest.is_protected(pos, player:get_player_name()) then |
||||
|
minetest.record_protection_violation(pos, player:get_player_name()) |
||||
|
return 0 |
||||
|
end |
||||
|
return stack:get_count() |
||||
|
end |
||||
|
|
||||
|
local function on_receive_fields(pos, formname, fields, sender) |
||||
|
local ore_node = minetest.get_node_or_nil(pos) |
||||
|
|
||||
|
if minetest.is_protected(pos, sender:get_player_name()) then |
||||
|
minetest.record_protection_violation(pos, sender:get_player_name()) |
||||
|
return |
||||
|
end |
||||
|
|
||||
|
-- get the ore name |
||||
|
local ingot = ore_node.name |
||||
|
ingot = string.split(ingot, ":") |
||||
|
ingot = string.split(ingot[2], "_") |
||||
|
|
||||
|
local meta = minetest.get_meta(pos) |
||||
|
local inv = meta:get_inventory() |
||||
|
local fuellist = inv:get_list("fuel") |
||||
|
|
||||
|
if inv:is_empty("fuel") then |
||||
|
if ore_node.name ~= "spawners:stone_with_"..ingot[3].."_spawner" then |
||||
|
minetest.swap_node(pos, {name="spawners:stone_with_"..ingot[3].."_spawner"}) |
||||
|
end |
||||
|
meta:set_string("infotext", ingot[3].." ore spawner is empty") |
||||
|
else |
||||
|
meta:set_string("infotext", ingot[3].." ore spawner fuel: "..inv:get_stack("fuel", 1):get_count()) |
||||
|
end |
||||
|
|
||||
|
-- fix iron vs. steel issue |
||||
|
if ingot[3] == "iron" then |
||||
|
ingot[3] = "steel" |
||||
|
end |
||||
|
|
||||
|
if not fuellist[1]:is_empty() and inv:get_stack("fuel", 1):get_name() == "default:"..ingot[3].."_ingot" then |
||||
|
|
||||
|
-- fix iron vs. steel issue |
||||
|
if ingot[3] == "steel" then |
||||
|
ingot[3] = "iron" |
||||
|
end |
||||
|
|
||||
|
local waiting, found_node = spawners.check_node_status_ores(pos, "stone_with_"..ingot[3], "default:stone") |
||||
|
|
||||
|
if found_node then |
||||
|
minetest.swap_node(pos, {name="spawners:stone_with_"..ingot[3].."_spawner_active"}) |
||||
|
elseif waiting then |
||||
|
minetest.swap_node(pos, {name="spawners:stone_with_"..ingot[3].."_spawner_waiting"}) |
||||
|
|
||||
|
meta:set_string("infotext", "Waiting status - player was away or no stone around, "..ingot[3].." ore spawner fuel: "..inv:get_stack("fuel", 1):get_count()) |
||||
|
else |
||||
|
return |
||||
|
end |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
-- Ores creation |
||||
|
function spawners.create_ore(ore_name, mod_prefix, size, offset, texture, sound_custom) |
||||
|
-- dummy inside the spawner |
||||
|
local dummy_ore_definition = { |
||||
|
hp_max = 1, |
||||
|
physical = false, |
||||
|
collisionbox = {0,0,0,0,0,0}, |
||||
|
visual = "wielditem", |
||||
|
visual_size = size, |
||||
|
timer = 0, |
||||
|
textures={"default:"..ore_name}, |
||||
|
makes_footstep_sound = false, |
||||
|
automatic_rotate = math.pi * -3, |
||||
|
m_name = "dummy_ore" |
||||
|
} |
||||
|
|
||||
|
local ore = string.split(ore_name, "_") |
||||
|
|
||||
|
dummy_ore_definition.on_activate = function(self) |
||||
|
self.object:setvelocity({x=0, y=0, z=0}) |
||||
|
self.object:setacceleration({x=0, y=0, z=0}) |
||||
|
self.object:set_armor_groups({immortal=1}) |
||||
|
end |
||||
|
|
||||
|
-- remove dummy after dug up the spawner |
||||
|
dummy_ore_definition.on_step = function(self, dtime) |
||||
|
self.timer = self.timer + dtime |
||||
|
local n = minetest.get_node_or_nil(self.object:getpos()) |
||||
|
if self.timer > 2 then |
||||
|
if n and n.name and n.name ~= "spawners:"..ore_name.."_spawner_active" and n.name ~= "spawners:"..ore_name.."_spawner_waiting" and n.name ~= "spawners:"..ore_name.."_spawner" then |
||||
|
self.object:remove() |
||||
|
end |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
minetest.register_entity("spawners:dummy_ore_"..ore_name, dummy_ore_definition) |
||||
|
|
||||
|
-- node spawner active |
||||
|
minetest.register_node("spawners:"..ore_name.."_spawner_active", { |
||||
|
description = ore_name.." spawner active", |
||||
|
paramtype = "light", |
||||
|
light_source = 4, |
||||
|
drawtype = "allfaces", |
||||
|
walkable = true, |
||||
|
sounds = default.node_sound_stone_defaults(), |
||||
|
damage_per_second = 4, |
||||
|
sunlight_propagates = true, |
||||
|
tiles = { |
||||
|
{ |
||||
|
name = "spawners_spawner_animated.png", |
||||
|
animation = { |
||||
|
type = "vertical_frames", |
||||
|
aspect_w = 32, |
||||
|
aspect_h = 32, |
||||
|
length = 2.0 |
||||
|
}, |
||||
|
} |
||||
|
}, |
||||
|
is_ground_content = true, |
||||
|
groups = {cracky=1,level=2,igniter=1,not_in_creative_inventory=1}, |
||||
|
drop = "spawners:"..ore_name.."_spawner", |
||||
|
can_dig = can_dig, |
||||
|
allow_metadata_inventory_put = allow_metadata_inventory_put, |
||||
|
allow_metadata_inventory_take = allow_metadata_inventory_take, |
||||
|
on_receive_fields = on_receive_fields, |
||||
|
}) |
||||
|
|
||||
|
-- node spawner waiting - no stone around or no fuel |
||||
|
minetest.register_node("spawners:"..ore_name.."_spawner_waiting", { |
||||
|
description = ore_name.." spawner waiting", |
||||
|
paramtype = "light", |
||||
|
light_source = 2, |
||||
|
drawtype = "allfaces", |
||||
|
walkable = true, |
||||
|
sounds = default.node_sound_stone_defaults(), |
||||
|
sunlight_propagates = true, |
||||
|
tiles = { |
||||
|
{ |
||||
|
name = "spawners_spawner_waiting_animated.png", |
||||
|
animation = { |
||||
|
type = "vertical_frames", |
||||
|
aspect_w = 32, |
||||
|
aspect_h = 32, |
||||
|
length = 2.0 |
||||
|
}, |
||||
|
} |
||||
|
}, |
||||
|
is_ground_content = true, |
||||
|
groups = {cracky=1,level=2,not_in_creative_inventory=1}, |
||||
|
drop = "spawners:"..ore_name.."_spawner", |
||||
|
can_dig = can_dig, |
||||
|
allow_metadata_inventory_put = allow_metadata_inventory_put, |
||||
|
allow_metadata_inventory_take = allow_metadata_inventory_take, |
||||
|
on_receive_fields = on_receive_fields, |
||||
|
}) |
||||
|
|
||||
|
-- node spawner inactive (default) |
||||
|
minetest.register_node("spawners:"..ore_name.."_spawner", { |
||||
|
description = ore_name.." spawner", |
||||
|
paramtype = "light", |
||||
|
drawtype = "allfaces", |
||||
|
walkable = true, |
||||
|
sounds = default.node_sound_stone_defaults(), |
||||
|
sunlight_propagates = true, |
||||
|
tiles = {"spawners_spawner.png"}, |
||||
|
is_ground_content = true, |
||||
|
groups = {cracky=1,level=2}, |
||||
|
stack_max = 1, |
||||
|
on_construct = function(pos) |
||||
|
local meta = minetest.get_meta(pos) |
||||
|
spawners.get_formspec(pos) |
||||
|
pos.y = pos.y + offset |
||||
|
minetest.add_entity(pos,"spawners:dummy_ore_"..ore_name) |
||||
|
meta:set_string("infotext", ore[3].." ore spawner is empty") |
||||
|
end, |
||||
|
|
||||
|
can_dig = can_dig, |
||||
|
|
||||
|
allow_metadata_inventory_put = allow_metadata_inventory_put, |
||||
|
allow_metadata_inventory_take = allow_metadata_inventory_take, |
||||
|
on_receive_fields = on_receive_fields, |
||||
|
}) |
||||
|
|
||||
|
-- ABM |
||||
|
minetest.register_abm({ |
||||
|
nodenames = {"spawners:"..ore_name.."_spawner_active", "spawners:"..ore_name.."_spawner_waiting"}, |
||||
|
interval = 5.0, |
||||
|
chance = 5, |
||||
|
action = function(pos, node, active_object_count, active_object_count_wider) |
||||
|
|
||||
|
local waiting, found_node = spawners.check_node_status_ores(pos, ore_name, "default:stone") |
||||
|
|
||||
|
|
||||
|
local meta = minetest.get_meta(pos) |
||||
|
local inv = meta:get_inventory() |
||||
|
|
||||
|
if found_node then |
||||
|
-- make sure the right node status is shown |
||||
|
if node.name ~= "spawners:"..ore_name.."_spawner_active" then |
||||
|
minetest.swap_node(pos, {name="spawners:"..ore_name.."_spawner_active"}) |
||||
|
end |
||||
|
|
||||
|
|
||||
|
-- take fuel |
||||
|
local stack = inv:get_stack("fuel", 1) |
||||
|
stack:take_item() |
||||
|
|
||||
|
|
||||
|
inv:set_stack("fuel", 1, stack) |
||||
|
|
||||
|
meta:set_string("infotext", ore[3].." ore spawner fuel: "..inv:get_stack("fuel", 1):get_count()) |
||||
|
|
||||
|
-- enough place to spawn more ores |
||||
|
spawners.start_spawning_ores(found_node, "default:"..ore_name, sound_custom) |
||||
|
|
||||
|
-- empty / no fuel |
||||
|
if inv:is_empty("fuel") then |
||||
|
minetest.swap_node(pos, {name="spawners:"..ore_name.."_spawner"}) |
||||
|
meta:set_string("infotext", ore[3].." ore spawner is empty.") |
||||
|
|
||||
|
end |
||||
|
else |
||||
|
-- waiting status |
||||
|
if node.name ~= "spawners:"..ore_name.."_spawner_waiting" then |
||||
|
minetest.swap_node(pos, {name="spawners:"..ore_name.."_spawner_waiting"}) |
||||
|
|
||||
|
meta:set_string("infotext", "Waiting status - player was away or no stone around, "..ore[3].." ore spawner fuel: "..inv:get_stack("fuel", 1):get_count()) |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
end |
||||
|
}) |
||||
|
|
||||
|
end |
||||
|
|
||||
|
-- default:stone_with_gold |
||||
|
spawners.create_ore("stone_with_gold", "", {x=.33,y=.33}, 0, {"default_stone.png^default_mineral_gold.png"}, "strike") |
||||
|
|
||||
|
-- default:stone_with_iron |
||||
|
spawners.create_ore("stone_with_iron", "", {x=.33,y=.33}, 0, {"default_stone.png^default_mineral_gold.png"}, "strike") |
||||
|
|
||||
|
-- default:stone_with_copper |
||||
|
spawners.create_ore("stone_with_copper", "", {x=.33,y=.33}, 0, {"default_stone.png^default_mineral_gold.png"}, "strike") |
||||
|
|
||||
|
|
||||
|
-- recipes |
||||
|
-- minetest.register_craft({ |
||||
|
-- output = "spawners:stone_with_gold_spawner", |
||||
|
-- recipe = { |
||||
|
-- {"default:diamondblock", "fire:flint_and_steel", "default:diamondblock"}, |
||||
|
-- {"xpanes:bar_flat", "default:goldblock", "xpanes:bar_flat"}, |
||||
|
-- {"default:diamondblock", "xpanes:bar_flat", "default:diamondblock"}, |
||||
|
-- } |
||||
|
-- }) |
||||
|
|
||||
|
-- minetest.register_craft({ |
||||
|
-- output = "spawners:stone_with_iron_spawner", |
||||
|
-- recipe = { |
||||
|
-- {"default:diamondblock", "fire:flint_and_steel", "default:diamondblock"}, |
||||
|
-- {"xpanes:bar_flat", "default:steelblock", "xpanes:bar_flat"}, |
||||
|
-- {"default:diamondblock", "xpanes:bar_flat", "default:diamondblock"}, |
||||
|
-- } |
||||
|
-- }) |
||||
|
|
||||
|
-- minetest.register_craft({ |
||||
|
-- output = "spawners:stone_with_copper_spawner", |
||||
|
-- recipe = { |
||||
|
-- {"default:diamondblock", "fire:flint_and_steel", "default:diamondblock"}, |
||||
|
-- {"xpanes:bar_flat", "default:copperblock", "xpanes:bar_flat"}, |
||||
|
-- {"default:diamondblock", "xpanes:bar_flat", "default:diamondblock"}, |
||||
|
-- } |
||||
|
-- }) |
Loading…
Reference in new issue