From df7d7136bdf12537c5d3a9343cb405abc18e9c0c Mon Sep 17 00:00:00 2001 From: ThePython <87204246+ThePython10110@users.noreply.github.com> Date: Tue, 5 Mar 2024 19:10:37 -0800 Subject: [PATCH] Added BHB/Void pedestal --- CHANGELOG.md | 6 +- exchangeclone/alchemical_chests.lua | 4 +- exchangeclone/black_hole_band.lua | 85 +++++++++++++------------- exchangeclone/craftitems.lua | 25 ++++++++ exchangeclone/dark_matter_pedestal.lua | 6 ++ exchangeclone/init.lua | 3 +- zzzz_exchangeclone_init/lib.lua | 4 +- 7 files changed, 82 insertions(+), 51 deletions(-) create mode 100644 exchangeclone/craftitems.lua diff --git a/CHANGELOG.md b/CHANGELOG.md index c9731d8..e2e336c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,19 +9,19 @@ - [x] Make collectors use ProjectExpansion's textures - [x] Add Evertide Amulet - [x] Add Volcanite Amulet -- [ ] Add Zero Ring -- [ ] Add Ring of Ignition - [x] Add Black Hole Band (without bag functionality) - [x] Add Void Ring - [x] Add DM Pedestal +- [ ] Add Zero Ring +- [ ] Add Ring of Ignition - [ ] Add Pedestal abilities - [x] Passive Stones - [x] Talisman - [x] Evertide - [x] Volcanite + - [x] Black Hole/Void - [ ] Zero - [ ] Ignition - - [ ] Black Hole/Void - [ ] Update wiki ## Changelog diff --git a/exchangeclone/alchemical_chests.lua b/exchangeclone/alchemical_chests.lua index 2960d72..f53c44e 100644 --- a/exchangeclone/alchemical_chests.lua +++ b/exchangeclone/alchemical_chests.lua @@ -112,8 +112,8 @@ for color, color_data in pairs(exchangeclone.colors) do end if pointed_thing.type == "node" and minetest.get_item_group(minetest.get_node(pointed_thing.under).name, "advanced_alchemical_chest") > 0 then - if minetest.is_protected(player) then - minetest.record_protection_violation(player) + if minetest.is_protected(pointed_thing.under, player:get_player_name()) then + minetest.record_protection_violation(pointed_thing.under, player:get_player_name()) else minetest.set_node(pointed_thing.under, {name=advanced_itemstring}) local on_construct = alchemical_on_construct(color_data.name) diff --git a/exchangeclone/black_hole_band.lua b/exchangeclone/black_hole_band.lua index 0f0bd33..6caaa17 100644 --- a/exchangeclone/black_hole_band.lua +++ b/exchangeclone/black_hole_band.lua @@ -5,9 +5,6 @@ local function pickup_items(player) for j = 1, #objs do local obj = objs[j] if obj:get_luaentity() and obj:get_luaentity().name == "__builtin:item" then - local objpos = obj:get_pos() - local objdir = vector.direction(pos, objpos) - local objdist = vector.distance(pos, objpos) local itemstack = obj:get_luaentity().itemstring if player:get_inventory():room_for_item("main", itemstack) then player:get_inventory():add_item("main", itemstack) @@ -57,20 +54,6 @@ local function void_ring_teleport(player) exchangeclone.start_cooldown(player, "void_ring", 0.5) end -minetest.register_tool("exchangeclone:black_hole_band", { - description = "Black Hole Band", - inventory_image = "exchangeclone_black_hole_band.png", - on_secondary_use = exchangeclone.toggle_active, - on_place = exchangeclone.toggle_active, - groups = {exchangeclone_passive = 1, disable_repair = 1, immune_to_fire = 1}, - _exchangeclone_passive = { - func = pickup_items, - hotbar = true, - active_image = "exchangeclone_black_hole_band_active.png", - exclude = {"exchangeclone:void_ring"} - }, -}) - -- A lot of duplication here, unfortunately local function get_void_ring_description(itemstack) local meta = itemstack:get_meta() @@ -173,6 +156,47 @@ local void_ring_leftclick = function(itemstack, player, pointed_thing) return itemstack end +local function black_hole_pedestal(pos) + local nearby_chests = {} + for _, neighbor_pos in ipairs(exchangeclone.neighbors) do + local new_pos = vector.add(pos, neighbor_pos) + if minetest.get_node(new_pos).name == "exchangeclone:alchemical_chest" then + table.insert(nearby_chests, new_pos) + end + end + if not nearby_chests[1] then return end + local objs = minetest.get_objects_inside_radius(pos, 5) + for j = 1, #objs do + local obj = objs[j] + if obj:get_luaentity() and obj:get_luaentity().name == "__builtin:item" then + local itemstack = obj:get_luaentity().itemstring + for _, chest in ipairs(nearby_chests) do + local inv = minetest.get_meta(chest):get_inventory() + if inv:room_for_item("main", itemstack) then + inv:add_item("main", itemstack) + obj:remove() + break + end + end + end + end +end + +minetest.register_tool("exchangeclone:black_hole_band", { + description = "Black Hole Band", + inventory_image = "exchangeclone_black_hole_band.png", + on_secondary_use = exchangeclone.toggle_active, + on_place = exchangeclone.toggle_active, + groups = {exchangeclone_passive = 1, disable_repair = 1, immune_to_fire = 1}, + _exchangeclone_passive = { + func = pickup_items, + hotbar = true, + active_image = "exchangeclone_black_hole_band_active.png", + exclude = {"exchangeclone:void_ring"} + }, + _exchangeclone_pedestal = black_hole_pedestal, +}) + minetest.register_tool("exchangeclone:void_ring", { description = "Void Ring", inventory_image = "exchangeclone_void_ring.png", @@ -195,32 +219,7 @@ minetest.register_tool("exchangeclone:void_ring", { active_image = "exchangeclone_void_ring_active.png", exclude = {"exchangeclone:black_hole_band", "exchangeclone:gem_of_eternal_density"} }, -}) - -minetest.register_craftitem("exchangeclone:iron_band", { - description = "Iron Band", -- I could easily make it "Steel Band" in MTG but I don't care. - groups = {craftitem = 1}, - inventory_image = "exchangeclone_iron_band.png" -}) - -minetest.register_craft({ - output = "exchangeclone:iron_band", - recipe = { - {exchangeclone.itemstrings.iron, exchangeclone.itemstrings.iron, exchangeclone.itemstrings.iron}, - {exchangeclone.itemstrings.iron, exchangeclone.itemstrings.lava_bucket, exchangeclone.itemstrings.iron}, - {exchangeclone.itemstrings.iron, exchangeclone.itemstrings.iron, exchangeclone.itemstrings.iron}, - }, - replacements = {{exchangeclone.itemstrings.lava_bucket, exchangeclone.itemstrings.empty_bucket}} -}) - -minetest.register_craft({ - output = "exchangeclone:iron_band", - recipe = { - {exchangeclone.itemstrings.iron, exchangeclone.itemstrings.iron, exchangeclone.itemstrings.iron}, - {exchangeclone.itemstrings.iron, "exchangeclone:volcanite_amulet", exchangeclone.itemstrings.iron}, - {exchangeclone.itemstrings.iron, exchangeclone.itemstrings.iron, exchangeclone.itemstrings.iron}, - }, - replacements = {{"exchangeclone:volcanite_amulet", "exchangeclone:volcanite_amulet"}} + _exchangeclone_pedestal = black_hole_pedestal, }) local ingredient = exchangeclone.mcl and "mcl_mobitems:string" or "farming:cotton" diff --git a/exchangeclone/craftitems.lua b/exchangeclone/craftitems.lua new file mode 100644 index 0000000..a847673 --- /dev/null +++ b/exchangeclone/craftitems.lua @@ -0,0 +1,25 @@ +minetest.register_craftitem("exchangeclone:iron_band", { + description = "Iron Band", -- I could easily make it "Steel Band" in MTG but I don't care. + groups = {craftitem = 1}, + inventory_image = "exchangeclone_iron_band.png" +}) + +minetest.register_craft({ + output = "exchangeclone:iron_band", + recipe = { + {exchangeclone.itemstrings.iron, exchangeclone.itemstrings.iron, exchangeclone.itemstrings.iron}, + {exchangeclone.itemstrings.iron, exchangeclone.itemstrings.lava_bucket, exchangeclone.itemstrings.iron}, + {exchangeclone.itemstrings.iron, exchangeclone.itemstrings.iron, exchangeclone.itemstrings.iron}, + }, + replacements = {{exchangeclone.itemstrings.lava_bucket, exchangeclone.itemstrings.empty_bucket}} +}) + +minetest.register_craft({ + output = "exchangeclone:iron_band", + recipe = { + {exchangeclone.itemstrings.iron, exchangeclone.itemstrings.iron, exchangeclone.itemstrings.iron}, + {exchangeclone.itemstrings.iron, "exchangeclone:volcanite_amulet", exchangeclone.itemstrings.iron}, + {exchangeclone.itemstrings.iron, exchangeclone.itemstrings.iron, exchangeclone.itemstrings.iron}, + }, + replacements = {{"exchangeclone:volcanite_amulet", "exchangeclone:volcanite_amulet"}} +}) \ No newline at end of file diff --git a/exchangeclone/dark_matter_pedestal.lua b/exchangeclone/dark_matter_pedestal.lua index e13c268..6d2b241 100644 --- a/exchangeclone/dark_matter_pedestal.lua +++ b/exchangeclone/dark_matter_pedestal.lua @@ -142,6 +142,9 @@ minetest.register_node("exchangeclone:dark_matter_pedestal", { } }, on_punch = function(pos, node, player, pointed_thing) + if minetest.is_protected(pos, player:get_player_name()) then + minetest.record_protection_violation(pos, player:get_player_name()) + end local wielded_item = player:get_wielded_item() local meta = minetest.get_meta(pos) local inv = meta:get_inventory() @@ -156,6 +159,9 @@ minetest.register_node("exchangeclone:dark_matter_pedestal", { end end, on_rightclick = function(pos, node, player, pointed_thing) + if minetest.is_protected(pos, player:get_player_name()) then + minetest.record_protection_violation(pos, player:get_player_name()) + end local wielded_item = player:get_wielded_item() local meta = minetest.get_meta(pos) local inv = meta:get_inventory() diff --git a/exchangeclone/init.lua b/exchangeclone/init.lua index 6da1664..d25f37c 100644 --- a/exchangeclone/init.lua +++ b/exchangeclone/init.lua @@ -109,10 +109,10 @@ if exchangeclone.mcl2 then end local files = { + "craftitems", "fuels", "matter", "amulets", - "black_hole_band", "deprecated_stuff", "energy_collectors", "klein_stars", @@ -136,6 +136,7 @@ local files = { "emc_link", "alchemical_books", "dark_matter_pedestal", + "black_hole_band", } if exchangeclone.mcl or minetest.get_modpath("3d_armor") then diff --git a/zzzz_exchangeclone_init/lib.lua b/zzzz_exchangeclone_init/lib.lua index 3ccdccc..72a0885 100644 --- a/zzzz_exchangeclone_init/lib.lua +++ b/zzzz_exchangeclone_init/lib.lua @@ -733,10 +733,10 @@ minetest.register_chatcommand("set_player_emc", { }) exchangeclone.neighbors = { - {x=-1, y=0, z=0}, - {x=1, y=0, z=0}, {x=0, y=-1, z=0}, {x=0, y=1, z=0}, + {x=-1, y=0, z=0}, + {x=1, y=0, z=0}, {x=0, y=0, z=-1}, {x=0, y=0, z=1}, }