Cake+cauldron+endportalfr. put signal 4 comparator

Wuzzy 2018-05-13 00:23:34 +02:00
parent acd58f6fe5
commit a62b5de79e
5 changed files with 24 additions and 15 deletions

@ -55,6 +55,7 @@ Please read <http://minecraft.gamepedia.com/Breaking> to learn how digging times
* `cauldron`: Cauldron. 1: Empty. 2-4: Water height * `cauldron`: Cauldron. 1: Empty. 2-4: Water height
* `anvil`: Anvil. 1: No damage. 2-3: Higher damage levels * `anvil`: Anvil. 1: No damage. 2-3: Higher damage levels
* `no_rename=1`: Item cannot be renamed by anvil * `no_rename=1`: Item cannot be renamed by anvil
* `comparator_signal=X`: If set, this node outputs a constant (!) comparator signal output of strength X.
#### Footnotes #### Footnotes

@ -53,7 +53,7 @@ local comparator_deactivate = function(pos, node)
end end
-- wether pos has an inventory that contains at least one item -- weather pos has an inventory that contains at least one item
local container_inventory_nonempty = function(pos) local container_inventory_nonempty = function(pos)
local invnode = minetest.get_node(pos) local invnode = minetest.get_node(pos)
local invnodedef = minetest.registered_nodes[invnode.name] local invnodedef = minetest.registered_nodes[invnode.name]
@ -75,13 +75,21 @@ local container_inventory_nonempty = function(pos)
return false return false
end end
-- weather pos has an constant signal output for the comparator
local static_signal_output = function(pos)
local node = minetest.get_node(pos)
local g = minetest.get_item_group(node.name, "comparator_signal")
return g > 0
end
-- whether the comparator should be on according to its inputs -- whether the comparator should be on according to its inputs
local comparator_desired_on = function(pos, node) local comparator_desired_on = function(pos, node)
local my_input_rules = comparator_get_input_rules(node); local my_input_rules = comparator_get_input_rules(node);
local back_rule = my_input_rules[1] local back_rule = my_input_rules[1]
local state local state
if back_rule then if back_rule then
state = mesecon.is_power_on(vector.add(pos, back_rule)) or container_inventory_nonempty(vector.add(pos, back_rule)) local back_pos = vector.add(pos, back_rule)
state = mesecon.is_power_on(back_pos) or container_inventory_nonempty(back_pos) or static_signal_output(back_pos)
end end
-- if back input if off, we don't need to check side inputs -- if back input if off, we don't need to check side inputs
@ -307,19 +315,19 @@ minetest.register_craft({
-- Register active block handlers -- Register active block handlers
minetest.register_abm({ minetest.register_abm({
label = "Comparator check for containers", label = "Comparator signal input check (comparator is off)",
nodenames = { nodenames = {
"mcl_comparators:comparator_off_comp", "mcl_comparators:comparator_off_comp",
"mcl_comparators:comparator_off_sub", "mcl_comparators:comparator_off_sub",
}, },
neighbors = {"group:container"}, neighbors = {"group:container", "group:comparator_signal"},
interval = 1, interval = 1,
chance = 1, chance = 1,
action = update_self, action = update_self,
}) })
minetest.register_abm({ minetest.register_abm({
label = "Comparator check for no containers", label = "Comparator signal input check (comparator is on)",
nodenames = { nodenames = {
"mcl_comparators:comparator_on_comp", "mcl_comparators:comparator_on_comp",
"mcl_comparators:comparator_on_sub", "mcl_comparators:comparator_on_sub",

@ -46,7 +46,7 @@ minetest.register_node("mcl_cake:cake", {
fixed = full_cake fixed = full_cake
}, },
stack_max = 1, stack_max = 1,
groups = {handy=1, cake=7, food=2,no_eat_delay=1, attached_node=1, dig_by_piston=1}, groups = {handy=1, cake=7, food=2,no_eat_delay=1, attached_node=1, dig_by_piston=1, comparator_signal=14},
drop = '', drop = '',
on_rightclick = function(pos, node, clicker, itemstack) on_rightclick = function(pos, node, clicker, itemstack)
local newcake = minetest.do_item_eat(2, ItemStack("mcl_cake:cake_6"), ItemStack("mcl_cake:cake"), clicker, {type="nothing"}) local newcake = minetest.do_item_eat(2, ItemStack("mcl_cake:cake_6"), ItemStack("mcl_cake:cake"), clicker, {type="nothing"})
@ -102,7 +102,7 @@ local register_slice = function(level, nodebox, desc)
type = "fixed", type = "fixed",
fixed = nodebox, fixed = nodebox,
}, },
groups = {handy=1, cake=level, food=2,no_eat_delay=1,attached_node=1,not_in_creative_inventory=1,dig_by_piston=1}, groups = {handy=1, cake=level, food=2,no_eat_delay=1,attached_node=1,not_in_creative_inventory=1,dig_by_piston=1,comparator_signal=level*2},
drop = '', drop = '',
on_rightclick = on_rightclick, on_rightclick = on_rightclick,
sounds = mcl_sounds.node_sound_leaves_defaults(), sounds = mcl_sounds.node_sound_leaves_defaults(),
@ -118,9 +118,9 @@ local register_slice = function(level, nodebox, desc)
end end
end end
register_slice(6, slice_6, "Cake (6 Slices Left") register_slice(6, slice_6, "Cake (6 Slices Left)")
register_slice(5, slice_5, "Cake (5 Slices Left") register_slice(5, slice_5, "Cake (5 Slices Left)")
register_slice(4, slice_4, "Cake (4 Slices Left") register_slice(4, slice_4, "Cake (4 Slices Left)")
register_slice(3, slice_3, "Cake (3 Slices Left") register_slice(3, slice_3, "Cake (3 Slices Left)")
register_slice(2, slice_2, "Cake (2 Slices Left") register_slice(2, slice_2, "Cake (2 Slices Left)")
register_slice(1, slice_1, "Cake (1 Slice Left") register_slice(1, slice_1, "Cake (1 Slice Left)")

@ -79,7 +79,7 @@ local register_filled_cauldron = function(water_level, description, river_water)
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
is_ground_content = false, is_ground_content = false,
groups = {pickaxey=1, not_in_creative_inventory=1, cauldron=(1+water_level)}, groups = {pickaxey=1, not_in_creative_inventory=1, cauldron=(1+water_level), comparator_signal=water_level},
node_box = cauldron_nodeboxes[water_level], node_box = cauldron_nodeboxes[water_level],
collision_box = cauldron_nodeboxes[0], collision_box = cauldron_nodeboxes[0],
selection_box = { type = "regular" }, selection_box = { type = "regular" },

@ -309,7 +309,7 @@ minetest.register_node("mcl_portals:end_portal_frame", {
minetest.register_node("mcl_portals:end_portal_frame_eye", { minetest.register_node("mcl_portals:end_portal_frame_eye", {
description = "End Portal Frame with Eye of Ender", description = "End Portal Frame with Eye of Ender",
_doc_items_create_entry = false, _doc_items_create_entry = false,
groups = { creative_breakable = 1, not_in_creative_inventory = 1 }, groups = { creative_breakable = 1, not_in_creative_inventory = 1, comparator_signal = 15 },
tiles = { "mcl_portals_endframe_top.png^[lowpart:75:mcl_portals_endframe_eye.png", "mcl_portals_endframe_bottom.png", "mcl_portals_endframe_eye.png^mcl_portals_endframe_side.png" }, tiles = { "mcl_portals_endframe_top.png^[lowpart:75:mcl_portals_endframe_eye.png", "mcl_portals_endframe_bottom.png", "mcl_portals_endframe_eye.png^mcl_portals_endframe_side.png" },
paramtype2 = "facedir", paramtype2 = "facedir",
drawtype = "nodebox", drawtype = "nodebox",