Improvements and aliases
This commit is contained in:
parent
3c8345da1b
commit
3874c608f3
|
@ -64,7 +64,7 @@ Dependencies: Minetest Game or MineClone.
|
|||
* Technic recipe types (grinding, alloying, etc.) now also work, as long as their `output_size` is 1.
|
||||
* Added energy values for Basic Materials and Technic!
|
||||
* Infinite food (costs 64 energy to use, equal to steak)
|
||||
* Alchemical Chest
|
||||
* Alchemical Chests, Alchemical Bags, and Advanced Alchemical Chests
|
||||
* Support for pipeworks and (non-MCL) hoppers!
|
||||
* Repair Talisman
|
||||
* Covalence Dust (Aux1+right-click with Philosopher's Stone to open repairer, only tools with an energy value can be repaired)
|
||||
|
@ -77,7 +77,8 @@ Dependencies: Minetest Game or MineClone.
|
|||
* Energy values are now in `_exchangeclone_energy/energy_values.lua`, and are laid out differently, and aliases now work.
|
||||
* ExchangeClone is now a modpack for [annoying reasons](https://forum.minetest.net/viewtopic.php?f=47&p=429775s). *Every single mod* in the modpack is required, regardless of what it says the dependencies are. Disable and then enable it for everything to work correctly.
|
||||
* The default energy value is no longer 1 but none.
|
||||
* The 2-billion-ish personal energy limit is has been increased to the actual maximum Lua allows. This may mean some precision might be lost when your personal energy reaches a few quadrillion... but at that point, you don't really care about the exact number.
|
||||
* The 2-billion-ish personal energy limit is has been increased to 1,000,000,000,000 (1 trillion). Any higher and there are precision-based exploits like being able to create infinite glass panes when you have enough energy.
|
||||
* Added comma separators when energy is shown (to make it easier to identify large numbers)
|
||||
* Tools that break multiple nodes at once (hammers, hoes, katar, and morningstar) use a better method that may (?) slightly decrease lag.
|
||||
* Ender pearls can now be crafted with 4 iron and the Philosopher's Stone.
|
||||
* A couple changes the Philosopher's Stone's transmutation:
|
||||
|
@ -88,6 +89,7 @@ Dependencies: Minetest Game or MineClone.
|
|||
* Bugfixes:
|
||||
* Fixed potion energy values
|
||||
* Fixed Red Matter Shield recipe
|
||||
* Fixed other modes of DM/RM tools not having energy values
|
||||
|
||||
### 5.3
|
||||
* Bugfixes
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
-- Just in case people want to add stuff to these lists in their mods...
|
||||
-- This lets mods add things to these lists if they want.
|
||||
exchangeclone.group_values = exchangeclone.group_values or {}
|
||||
exchangeclone.energy_values = exchangeclone.energy_values or {}
|
||||
|
||||
|
@ -16,8 +16,6 @@ if exchangeclone.mcl then
|
|||
}
|
||||
|
||||
exchangeclone.energy_values = {
|
||||
-- TODO
|
||||
["doc_identifier:identifier_liquid"] = 5,
|
||||
|
||||
["fake_liquids:bucket_fake_lava"] = 832,
|
||||
["fake_liquids:bucket_fake_water"] = 960,
|
||||
|
@ -35,38 +33,14 @@ if exchangeclone.mcl then
|
|||
["mcl_anvils:anvil_damage_2"] = 3328,
|
||||
|
||||
["mcl_armor:boots_chain"] = 768,
|
||||
["mcl_armor:boots_chain_enchanted"] = 768,
|
||||
["mcl_armor:boots_diamond_enchanted"] = 32768,
|
||||
["mcl_armor:boots_gold_enchanted"] = 8192,
|
||||
["mcl_armor:boots_iron_enchanted"] = 1024,
|
||||
["mcl_armor:boots_leather_enchanted"] = 256,
|
||||
["mcl_armor:boots_netherite"] = 106496,
|
||||
["mcl_armor:boots_netherite_enchanted"] = 106496,
|
||||
["mcl_armor:chestplate_chain"] = 1792,
|
||||
["mcl_armor:chestplate_chain_enchanted"] = 1792,
|
||||
["mcl_armor:chestplate_diamond_enchanted"] = 65536,
|
||||
["mcl_armor:chestplate_gold_enchanted"] = 16384,
|
||||
["mcl_armor:chestplate_iron_enchanted"] = 2048,
|
||||
["mcl_armor:chestplate_leather_enchanted"] = 512,
|
||||
["mcl_armor:chestplate_netherite"] = 139264,
|
||||
["mcl_armor:chestplate_netherite_enchanted"] = 139264,
|
||||
["mcl_armor:elytra"] = 297216,
|
||||
["mcl_armor:helmet_chain"] = 1024,
|
||||
["mcl_armor:helmet_chain_enchanted"] = 1024,
|
||||
["mcl_armor:helmet_diamond_enchanted"] = 40960,
|
||||
["mcl_armor:helmet_gold_enchanted"] = 10240,
|
||||
["mcl_armor:helmet_iron_enchanted"] = 1280,
|
||||
["mcl_armor:helmet_leather_enchanted"] = 320,
|
||||
["mcl_armor:helmet_netherite"] = 114688,
|
||||
["mcl_armor:helmet_netherite_enchanted"] = 114688,
|
||||
["mcl_armor:leggings_chain"] = 1536,
|
||||
["mcl_armor:leggings_chain_enchanted"] = 1536,
|
||||
["mcl_armor:leggings_diamond_enchanted"] = 57344,
|
||||
["mcl_armor:leggings_gold_enchanted"] = 14336,
|
||||
["mcl_armor:leggings_iron_enchanted"] = 1792,
|
||||
["mcl_armor:leggings_leather_enchanted"] = 448,
|
||||
["mcl_armor:leggings_netherite"] = 131072,
|
||||
["mcl_armor:leggings_netherite_enchanted"] = 131072,
|
||||
|
||||
["mcl_bamboo:bamboo"] = 2,
|
||||
["mcl_bamboo:bamboo_block_stripped"] = 16,
|
||||
|
@ -87,10 +61,7 @@ if exchangeclone.mcl then
|
|||
["mcl_books:book"] = 150,
|
||||
["mcl_books:written_book"] = 206,
|
||||
|
||||
["mcl_bows:bow_enchanted"] = 48,
|
||||
["mcl_bows:crossbow_enchanted"] = 295,
|
||||
["mcl_bows:crossbow_loaded"] = 298,
|
||||
["mcl_bows:crossbow_loaded_enchanted"] = 298,
|
||||
|
||||
["mcl_buckets:bucket_axolotl"] = 1024,
|
||||
["mcl_buckets:bucket_cod"] = 896,
|
||||
|
@ -105,7 +76,7 @@ if exchangeclone.mcl then
|
|||
|
||||
["mcl_cocoas:cocoa_beans"] = 128,
|
||||
|
||||
["mcl_copper:raw_copper"] = 85,
|
||||
["mcl_copper:copper_ingot"] = 85,
|
||||
|
||||
["mcl_core:andesite"] = 1,
|
||||
["mcl_core:apple"] = 128,
|
||||
|
@ -124,10 +95,12 @@ if exchangeclone.mcl then
|
|||
["mcl_core:dirt"] = 1,
|
||||
["mcl_core:emerald"] = 4096,
|
||||
["mcl_core:flint"] = 4,
|
||||
["mcl_core:gold_ingot"] = 2048,
|
||||
["mcl_core:granite"] = 1,
|
||||
["mcl_core:grass"] = 1,
|
||||
["mcl_core:gravel"] = 1,
|
||||
["mcl_core:ice"] = 1,
|
||||
["mcl_core:iron_ingot"] = 256,
|
||||
["mcl_core:lapis"] = 864,
|
||||
["mcl_core:mycelium"] = 1,
|
||||
["mcl_core:obsidian"] = 64,
|
||||
|
@ -154,13 +127,7 @@ if exchangeclone.mcl then
|
|||
["mcl_farming:beetroot_item"] = 24,
|
||||
["mcl_farming:beetroot_seeds"] = 16,
|
||||
["mcl_farming:carrot_item"] = 24,
|
||||
["mcl_farming:hoe_diamond_enchanted"] = 16380,
|
||||
["mcl_farming:hoe_gold_enchanted"] = 4104,
|
||||
["mcl_farming:hoe_iron_enchanted"] = 520,
|
||||
["mcl_farming:hoe_netherite"] = 90108,
|
||||
["mcl_farming:hoe_netherite_enchanted"] = 90108,
|
||||
["mcl_farming:hoe_stone_enchanted"] = 10,
|
||||
["mcl_farming:hoe_wood_enchanted"] = 24,
|
||||
["mcl_farming:melon_item"] = 36,
|
||||
["mcl_farming:potato_item"] = 24,
|
||||
["mcl_farming:potato_item_poison"] = 24,
|
||||
|
@ -172,7 +139,6 @@ if exchangeclone.mcl then
|
|||
|
||||
["mcl_fishing:clownfish_raw"] = 64,
|
||||
["mcl_fishing:fish_raw"] = 40,
|
||||
["mcl_fishing:fishing_rod_enchanted"] = 36,
|
||||
["mcl_fishing:pufferfish_raw"] = 64,
|
||||
["mcl_fishing:salmon_raw"] = 48,
|
||||
|
||||
|
@ -294,9 +260,6 @@ if exchangeclone.mcl then
|
|||
|
||||
["mcl_pottery_sherds:pot"] = 16,
|
||||
|
||||
["mcl_raw_ores:raw_gold"] = 2048,
|
||||
["mcl_raw_ores:raw_iron"] = 256,
|
||||
|
||||
["mcl_sponges:sponge"] = 1024,
|
||||
["mcl_sponges:sponge_wet"] = 1024,
|
||||
["mcl_sponges:sponge_wet_river_water"] = 1024,
|
||||
|
@ -306,33 +269,9 @@ if exchangeclone.mcl then
|
|||
["mcl_throwing:snowball"] = 0.25,
|
||||
|
||||
["mcl_tools:axe_netherite"] = 98312,
|
||||
["mcl_tools:axe_wood_enchanted"] = 32,
|
||||
["mcl_tools:axe_stone_enchanted"] = 11,
|
||||
["mcl_tools:axe_iron_enchanted"] = 796,
|
||||
["mcl_tools:axe_gold_enchanted"] = 6152,
|
||||
["mcl_tools:axe_diamond_enchanted"] = 24584,
|
||||
["mcl_tools:axe_netherite_enchanted"] = 98312,
|
||||
["mcl_tools:pick_netherite"] = 98312,
|
||||
["mcl_tools:pick_wood_enchanted"] = 32,
|
||||
["mcl_tools:pick_stone_enchanted"] = 11,
|
||||
["mcl_tools:pick_iron_enchanted"] = 796,
|
||||
["mcl_tools:pick_gold_enchanted"] = 6152,
|
||||
["mcl_tools:pick_diamond_enchanted"] = 24584,
|
||||
["mcl_tools:pick_netherite_enchanted"] = 98312,
|
||||
["mcl_tools:shovel_netherite"] = 81928,
|
||||
["mcl_tools:shovel_wood_enchanted"] = 16,
|
||||
["mcl_tools:shovel_stone_enchanted"] = 9,
|
||||
["mcl_tools:shovel_iron_enchanted"] = 264,
|
||||
["mcl_tools:shovel_gold_enchanted"] = 2056,
|
||||
["mcl_tools:shovel_diamond_enchanted"] = 8200,
|
||||
["mcl_tools:shovel_netherite_enchanted"] = 81928,
|
||||
["mcl_tools:sword_netherite"] = 90120,
|
||||
["mcl_tools:sword_wood_enchanted"] = 20,
|
||||
["mcl_tools:sword_stone_enchanted"] = 6,
|
||||
["mcl_tools:sword_iron_enchanted"] = 516,
|
||||
["mcl_tools:sword_gold_enchanted"] = 5000,
|
||||
["mcl_tools:sword_diamond_enchanted"] = 16392,
|
||||
["mcl_tools:sword_netherite_enchanted"] = 90120,
|
||||
|
||||
["mcl_totems:totem"] = 106496,
|
||||
["meat_blocks:meatball"] = 64,
|
||||
|
@ -381,7 +320,7 @@ else
|
|||
["default:clay_lump"] = 4,
|
||||
["default:coal_lump"] = 128,
|
||||
["default:cobble"] = 1,
|
||||
["default:copper_lump"] = 320,
|
||||
["default:copper_ingot"] = 320,
|
||||
["default:coral_brown"] = 8,
|
||||
["default:coral_cyan"] = 8,
|
||||
["default:coral_green"] = 8,
|
||||
|
@ -398,11 +337,11 @@ else
|
|||
["default:dry_dirt_with_grass"] = 1,
|
||||
["default:emergent_jungle_sapling"] = 32,
|
||||
["default:flint"] = 4,
|
||||
["default:gold_lump"] = 2048,
|
||||
["default:gold_ingot"] = 2048,
|
||||
["default:grass"] = 1,
|
||||
["default:gravel"] = 1,
|
||||
["default:ice"] = 1,
|
||||
["default:iron_lump"] = 256,
|
||||
["default:iron_ingot"] = 256,
|
||||
["default:large_cactus_seedling"] = 32,
|
||||
["default:mese_crystal"] = 4096,
|
||||
["default:mossycobble"] = 32,
|
||||
|
@ -417,7 +356,7 @@ else
|
|||
["default:snow"] = 0.5,
|
||||
["default:snowblock"] = 5,
|
||||
["default:stick"] = 4,
|
||||
["default:tin_lump"] = 384,
|
||||
["default:tin_ingot"] = 384,
|
||||
|
||||
["farming:cotton"] = 12,
|
||||
["farming:cotton_wild"] = 12,
|
||||
|
@ -425,16 +364,16 @@ else
|
|||
["farming:seed_wheat"] = 16,
|
||||
["farming:wheat"] = 24,
|
||||
|
||||
["moreores:mithril_lump"] = 16384,
|
||||
["moreores:silver_lump"] = 4000,
|
||||
["moreores:mithril_ingot"] = 16384,
|
||||
["moreores:silver_ingot"] = 4000,
|
||||
|
||||
["technic:chromium_lump"] = 4096,
|
||||
["technic:chromium_ingot"] = 4096,
|
||||
["technic:granite"] = 1,
|
||||
["technic:lead_lump"] = 256,
|
||||
["technic:lead_ingot"] = 256,
|
||||
["technic:marble"] = 1,
|
||||
["technic:sulfur_lump"] = 128,
|
||||
["technic:uranium_lump"] = 8192,
|
||||
["technic:zinc_lump"] = 512,
|
||||
["technic:uranium_ingot"] = 8192,
|
||||
["technic:zinc_ingot"] = 512,
|
||||
|
||||
["useful_green_potatoes:useful_green_potato"] = 256
|
||||
}
|
||||
|
@ -446,12 +385,19 @@ else
|
|||
|
||||
end
|
||||
|
||||
table.insert_all(exchangeclone.energy_values, {
|
||||
-- For things that are the same in both games:
|
||||
|
||||
for itemstring, energy_value in pairs ({
|
||||
["exchangeclone:alchemical_tome"] = 0,
|
||||
})
|
||||
}) do
|
||||
exchangeclone.energy_values[itemstring] = energy_value
|
||||
end
|
||||
|
||||
table.insert_all(exchangeclone.group_values, {
|
||||
{"tree", 32},
|
||||
{"leaves", 1},
|
||||
{"sapling", 32},
|
||||
{"useless", 0},
|
||||
{"exchangeclone_dirt", 1},
|
||||
{"exchangeclone_ore", 0}
|
||||
})
|
|
@ -59,35 +59,29 @@ end
|
|||
|
||||
local function set_item_energy(itemstring, energy_value)
|
||||
if not (energy_value and itemstring) then return end
|
||||
energy_value = math.floor(energy_value*4)/4 -- floor to nearest .25
|
||||
if energy_value < 0 then return end
|
||||
if energy_value < 10 then
|
||||
energy_value = math.floor(energy_value*4)/4 -- floor to nearest .5
|
||||
end
|
||||
itemstring = minetest.registered_aliases[itemstring] or itemstring
|
||||
local def = minetest.registered_items[itemstring]
|
||||
if not def then return end
|
||||
local description = def.description
|
||||
local groups = def.groups and table.copy(def.groups) or {}
|
||||
description = description:gsub("Energy Value: ([%d%.]+)", "")
|
||||
local existing_energy_value = description:find("Energy Value: ([%d%.]+)")
|
||||
local description = def.description or ""
|
||||
local existing_energy_value = description:find("Energy Value: ([%d%.,]+)")
|
||||
if existing_energy_value then
|
||||
description = description:gsub("Energy Value: ([%d%.]+)", "Energy Value: "..energy_value)
|
||||
description = description:gsub("Energy Value: ([%d%.,]+)", "Energy Value: "..exchangeclone.format_number(energy_value))
|
||||
else
|
||||
if description[#description] ~= "\n" then
|
||||
description = description.."\n"
|
||||
end
|
||||
description = description.."Energy Value: "..(energy_value)
|
||||
description = description.."Energy Value: "..exchangeclone.format_number(energy_value)
|
||||
end
|
||||
minetest.override_item(itemstring, {
|
||||
description = description,
|
||||
energy_value = energy_value,
|
||||
groups = groups
|
||||
})
|
||||
end
|
||||
|
||||
local function add_potion_energy(info)
|
||||
local base_cost = exchangeclone.get_item_energy("mcl_potions:water") or 1 --cost of water bottle
|
||||
--TODO: Change dragon's breath when MineClone does.
|
||||
-- TODO: Change dragon's breath when MineClone does.
|
||||
local dragon_breath_cost = exchangeclone.get_item_energy("mcl_potions:dragon_breath") or 8.5
|
||||
base_cost = math.floor(base_cost + (info.ingredient_cost / 3)) -- /3 because 3 potions/ingredient
|
||||
base_cost = base_cost + (info.custom_base_cost or (exchangeclone.get_item_energy("mcl_nether:nether_wart_item") or 24)/3)
|
||||
|
@ -130,7 +124,9 @@ end
|
|||
-- This is much easier than making it depend on every single mod.
|
||||
-- Actually, I'm kind of surprised that override_item still works...
|
||||
minetest.register_on_mods_loaded(function()
|
||||
minetest.log("action", "ExchangeClone: Registering energy values")
|
||||
local auto = {}
|
||||
|
||||
local groupnames = {}
|
||||
for index, group in ipairs(exchangeclone.group_values) do
|
||||
groupnames[#groupnames + 1] = group[1] --Get list of group names
|
||||
|
@ -141,25 +137,21 @@ minetest.register_on_mods_loaded(function()
|
|||
set_item_energy(item, group[2])
|
||||
end
|
||||
end
|
||||
|
||||
if exchangeclone.mcl then
|
||||
for i = 0, 31 do
|
||||
set_item_energy("mcl_compass:"..i.."_recovery", 443456)
|
||||
end
|
||||
for i = 0, 31 do
|
||||
set_item_energy("mcl_compass:"..i, (exchangeclone.get_item_energy("mcl_core:iron_ingot") or 256)*4+(exchangeclone.get_item_energy("mesecons:redstone") or 64))
|
||||
exchangeclone.register_energy_alias("mcl_compass:18", "mcl_compass:"..i)
|
||||
end
|
||||
for i = 0, 63 do
|
||||
set_item_energy("mcl_clock:clock_"..i, (exchangeclone.get_item_energy("mcl_core:gold_ingot") or 256)*4+(exchangeclone.get_item_energy("mesecons:redstone") or 64))
|
||||
end
|
||||
-- It's almost like the "compass" and "clock" groups don't exist. I tried using them, but it just didn't work.
|
||||
-- Bone meal just doesn't work either, for some reason.
|
||||
for i = 1, 8 do --faster than doing everything individually.
|
||||
set_item_energy("mcl_jukebox:record_"..i, 16384)
|
||||
exchangeclone.register_energy_alias("mcl_clock:clock", "mcl_clock:clock_"..i)
|
||||
end
|
||||
exchangeclone.register_energy_alias("doc_identifier:identifier_solid", "doc_identifier:identifier_liquid")
|
||||
end
|
||||
|
||||
for itemstring, energy_value in pairs(exchangeclone.energy_values) do
|
||||
set_item_energy(itemstring, energy_value)
|
||||
end
|
||||
|
||||
for itemstring, def in pairs(minetest.registered_items) do
|
||||
if def.exchangeclone_custom_energy then
|
||||
set_item_energy(itemstring, def.exchangeclone_custom_energy)
|
||||
|
@ -171,8 +163,9 @@ minetest.register_on_mods_loaded(function()
|
|||
and mod_name
|
||||
and def.description
|
||||
and def.description ~= ""
|
||||
and (minetest.get_item_group(itemstring, "not_in_creative_inventory") < 1)
|
||||
and (not def.energy_value)
|
||||
-- I hate recovery compasses.
|
||||
and ((minetest.get_item_group(itemstring, "not_in_creative_inventory") < 1) or (mod_name == "mcl_compass"))
|
||||
and (not exchangeclone.get_item_energy(itemstring))
|
||||
and (itemstring:sub(1,12) ~= "mcl_potions:")
|
||||
-- This does mean that other items in mcl_potions will be ignored unless explicitly specified,
|
||||
-- and items that are in groups mentioned above.
|
||||
|
@ -181,8 +174,17 @@ minetest.register_on_mods_loaded(function()
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- handle aliases in exchangeclone.recipes
|
||||
for itemstring, recipes in pairs(exchangeclone.recipes) do
|
||||
local new_name = ItemStack(itemstring):get_name()
|
||||
if new_name ~= itemstring then
|
||||
exchangeclone.recipes[new_name] = recipes
|
||||
end
|
||||
end
|
||||
|
||||
for i = 1, exchangeclone.num_passes do
|
||||
minetest.log("action", "PASS #"..i..":")
|
||||
minetest.log("action", "ExchangeClone: \tPASS #"..i..":")
|
||||
if auto == {} then break end
|
||||
for itemstring, _ in pairs(auto) do
|
||||
local cheapest = get_cheapest_recipe(exchangeclone.recipes[itemstring])
|
||||
|
@ -192,6 +194,9 @@ minetest.register_on_mods_loaded(function()
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
--minetest.log(dump(auto))
|
||||
|
||||
if exchangeclone.mcl then
|
||||
for _, info in ipairs(exchangeclone.mcl_potion_data) do
|
||||
add_potion_energy(info)
|
||||
|
@ -199,22 +204,41 @@ minetest.register_on_mods_loaded(function()
|
|||
for _, state in ipairs({"exposed", "weathered", "oxidized"}) do
|
||||
set_item_energy("mcl_copper:block_"..state, exchangeclone.get_item_energy("mcl_copper:block"))
|
||||
end
|
||||
-- Concrete and banners/shields (don't remember why the shields don't work)
|
||||
for _, color in ipairs({"red", "orange", "yellow", "green", "dark_green", "cyan", "light_blue", "blue", "purple", "magenta", "pink", "black", "white", "silver", "grey", "brown"}) do
|
||||
set_item_energy("mcl_colorblocks:concrete_"..color, exchangeclone.get_item_energy("mcl_colorblocks:concrete_powder_"..color) or 2)
|
||||
set_item_energy("mcl_shields:shield_"..color, (exchangeclone.get_item_energy("mcl_banners:banner_item_"..color) or 340) + (exchangeclone.get_item_energy("mcl_shields:shield") or 304))
|
||||
end
|
||||
end
|
||||
|
||||
for output, recipes in pairs(exchangeclone.recipes) do
|
||||
if output:find("silicon") then
|
||||
for _, recipe in ipairs(recipes) do
|
||||
minetest.log(dump(recipe))
|
||||
-- Enchanted/netherite tools
|
||||
for name, def in pairs(minetest.registered_items) do
|
||||
if def._mcl_enchanting_enchanted_tool then
|
||||
exchangeclone.register_energy_alias(name, def._mcl_enchanting_enchanted_tool)
|
||||
end
|
||||
if def._mcl_upgrade_item then
|
||||
if not name:find("enchanted") then
|
||||
set_item_energy(def._mcl_upgrade_item, (exchangeclone.get_item_energy(name) or 0)+(exchangeclone.get_item_energy("mcl_nether:netherite_ingot") or 73728))
|
||||
end
|
||||
end
|
||||
end
|
||||
-- Recovery compasses use a random compass frame for the crafting recipe... Incredibly irritating.
|
||||
for i = 0, 31 do
|
||||
if exchangeclone.get_item_energy("mcl_compass:"..i.."_recovery") then
|
||||
minetest.log(i)
|
||||
for j = 0, 31 do
|
||||
exchangeclone.register_energy_alias("mcl_compass:"..i.."_recovery", "mcl_compass:"..j.."_recovery")
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Adds energy values to aliased items, even though they're not used (just so it's displayed)
|
||||
for alias, itemstring in pairs(exchangeclone.energy_aliases) do
|
||||
set_item_energy(alias, exchangeclone.get_item_energy(itemstring))
|
||||
end
|
||||
|
||||
-- Free up memory (I assume this will do that?)
|
||||
exchangeclone.recipes = nil
|
||||
exchangeclone.energy_values = nil
|
||||
end
|
||||
)
|
||||
minetest.log("action", "ExchangeClone: Done registering energy values.")
|
||||
end)
|
|
@ -1,35 +0,0 @@
|
|||
local function alchemical_formspec(color)
|
||||
end
|
||||
|
||||
local colors = {
|
||||
"Red",
|
||||
"Orange",
|
||||
"Yellow",
|
||||
"Green",
|
||||
"Cyan",
|
||||
"Blue",
|
||||
"Magenta",
|
||||
""
|
||||
}
|
||||
|
||||
for _, color in colors do
|
||||
local lower_color = string.lower(color)
|
||||
local itemstring = "exchangeclone:"..lower_color.."_advanced_alchemical_chest"
|
||||
minetest.register_node(itemstring, {
|
||||
description = color.." Alchemical Chest",
|
||||
groups = {container = 2, alchemical_chest = 1},
|
||||
after_place_node = function(pos, player, itemstack, pointed_thing)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", alchemical_formspec(color))
|
||||
meta:set_string("infotext", color.." Alchemical Chest")
|
||||
end,
|
||||
})
|
||||
local wool_itemstring = (exchangeclone.mcl and "mcl_wool:" or "wool:")..lower_color
|
||||
minetest.register_craft({
|
||||
output = itemstring,
|
||||
recipe = {
|
||||
{"exchangeclone:low_covalence_dust", "exchangeclone:medium_covalence_dust", "exchangeclone:high_covalence_dust"},
|
||||
|
||||
}
|
||||
})
|
||||
end
|
|
@ -0,0 +1,159 @@
|
|||
local S = minetest.get_translator()
|
||||
|
||||
local colors = {
|
||||
red = "Red",
|
||||
orange = "Orange",
|
||||
yellow = "Yellow",
|
||||
green = "Lime",
|
||||
dark_green = "Green",
|
||||
cyan = "Cyan",
|
||||
light_blue = "Light Blue",
|
||||
blue = "Blue",
|
||||
purple = "Purple",
|
||||
magenta = "Magenta",
|
||||
pink = "Pink",
|
||||
black = "Black",
|
||||
white = "White",
|
||||
silver = exchangeclone.mcl and "Light Gray",
|
||||
grey = "Gray",
|
||||
brown = "Brown",
|
||||
}
|
||||
|
||||
-- color is nil for regular alchemical chests (not advanced/bags)
|
||||
local function alchemical_formspec(color)
|
||||
local listname, label
|
||||
local centered = exchangeclone.mcl and 2 or 2.5
|
||||
if color then
|
||||
local codified_color = string.lower(color):gsub(" ", "_")
|
||||
listname = "current_player;"..codified_color.."_alchemical_inventory"
|
||||
label = S("@1 Alchemical Inventory", S(color))
|
||||
else
|
||||
listname = "context;main"
|
||||
label = S("Alchemical Chest")
|
||||
end
|
||||
local formspec =
|
||||
"size[14,13]"..
|
||||
"label[0.25,0.0;"..label.."]"..
|
||||
"list["..listname..";0,0.5;13,8]"..
|
||||
exchangeclone.inventory_formspec(centered, 9)..
|
||||
"listring[current_player;main]"..
|
||||
"listring["..listname.."]"
|
||||
if exchangeclone.mcl then
|
||||
formspec = formspec..mcl_formspec.get_itemslot_bg(0,0.5,13,8)
|
||||
end
|
||||
return formspec
|
||||
end
|
||||
|
||||
local function alchemical_on_construct(color)
|
||||
return function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", alchemical_formspec(color))
|
||||
meta:set_string("infotext", color.." Alchemical Chest")
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_node("exchangeclone:alchemical_chest", {
|
||||
description = S("Alchemical Chest"),
|
||||
groups = {container = 2, alchemical_chest = 1, cracky = 2, pickaxey = 2},
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
meta:set_string("formspec", alchemical_formspec())
|
||||
meta:set_string("infotext", S("Alchemical Chest"))
|
||||
inv:set_size("main", 104)
|
||||
inv:set_width("main", 13)
|
||||
end,
|
||||
})
|
||||
|
||||
local stone_itemstring = exchangeclone.mcl and "mcl_core:stone" or "default:stone"
|
||||
local chest_itemstring = exchangeclone.mcl and "mcl_chests:chest" or "default:chest"
|
||||
|
||||
minetest.register_craft({
|
||||
output = "exchangeclone:alchemical_chest",
|
||||
recipe = {
|
||||
{"exchangeclone:low_covalence_dust", "exchangeclone:medium_covalence_dust", "exchangeclone:high_covalence_dust"},
|
||||
{stone_itemstring, exchangeclone.itemstrings.diamond, stone_itemstring},
|
||||
{exchangeclone.itemstrings.iron, chest_itemstring, exchangeclone.itemstrings.iron}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_on_joinplayer(function(player, last_login)
|
||||
local inv = player:get_inventory()
|
||||
for _, color in pairs(colors) do
|
||||
local codified_color = string.lower(color):gsub(" ", "_")
|
||||
inv:set_size(codified_color.."_alchemical_inventory", 104)
|
||||
inv:set_width(codified_color.."_alchemical_inventory", 13)
|
||||
end
|
||||
end)
|
||||
|
||||
for dye_color, color in pairs(colors) do
|
||||
local codified_color = string.lower(color):gsub(" ", "_")
|
||||
local bag_itemstring = "exchangeclone:"..codified_color.."_alchemical_bag"
|
||||
local advanced_itemstring = "exchangeclone:"..codified_color.."_advanced_alchemical_chest"
|
||||
local wool_itemstring = (exchangeclone.mcl and "mcl_wool:" or "wool:")..dye_color
|
||||
local dye_itemstring = (exchangeclone.mcl and "mcl_dye:" or "dye:")..dye_color
|
||||
|
||||
local function alchemical_bag_action(itemstack, player, pointed_thing)
|
||||
local click_test = exchangeclone.check_on_rightclick(itemstack, player, pointed_thing)
|
||||
if click_test ~= false then
|
||||
return click_test
|
||||
end
|
||||
if pointed_thing.type == "node"
|
||||
and minetest.get_item_group(minetest.get_node(pointed_thing.under).name, "advanced_alchemical_chest") > 0 then
|
||||
--minetest.log(advanced_itemstring)
|
||||
minetest.set_node(pointed_thing.under, {name=advanced_itemstring})
|
||||
local on_construct = alchemical_on_construct(color)
|
||||
on_construct(pointed_thing.under)
|
||||
return
|
||||
else
|
||||
minetest.show_formspec(player:get_player_name(), bag_itemstring, alchemical_formspec(color))
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_tool(bag_itemstring, {
|
||||
description = S("@1 Alchemical Bag", S(color)),
|
||||
groups = {disable_repair = 1, alchemical_bag = 1},
|
||||
on_secondary_use = alchemical_bag_action,
|
||||
on_place = alchemical_bag_action
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = bag_itemstring,
|
||||
recipe = {
|
||||
{"exchangeclone:high_covalence_dust", "exchangeclone:high_covalence_dust", "exchangeclone:high_covalence_dust"},
|
||||
{wool_itemstring, "exchangeclone:alchemical_chest", wool_itemstring},
|
||||
{wool_itemstring, wool_itemstring, wool_itemstring},
|
||||
}
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = bag_itemstring,
|
||||
type = "shapeless",
|
||||
recipe = {
|
||||
"group:alchemical_bag",
|
||||
dye_itemstring
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_node(advanced_itemstring, {
|
||||
description = S("@1 Advanced Alchemical Chest", color).."\n"..S("Shift+right-click with an alchemical bag to change the color."),
|
||||
groups = {container = 2, advanced_alchemical_chest = 1},
|
||||
on_construct = alchemical_on_construct(color)
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = advanced_itemstring,
|
||||
recipe = {
|
||||
{"exchangeclone:dark_matter", "exchangeclone:low_covalence_dust", "exchangeclone:dark_matter"},
|
||||
{"exchangeclone:medium_covalence_dust", "exchangeclone:"..codified_color.."_alchemical_bag", "exchangeclone:medium_covalence_dust"},
|
||||
{"exchangeclone:high_covalence_dust", "exchangeclone:low_covalence_dust", "exchangeclone:high_covalence_dust"},
|
||||
}
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = advanced_itemstring,
|
||||
type = "shapeless",
|
||||
recipe = {
|
||||
"group:advanced_alchemical_chest",
|
||||
dye_itemstring
|
||||
}
|
||||
})
|
||||
end
|
|
@ -1,3 +1,5 @@
|
|||
local S = minetest.get_translator()
|
||||
|
||||
-- true = blocks all damage
|
||||
-- {base_block, block_per_rm}: Amount blocked by full dark matter, extra amount per red matter armor piece
|
||||
local blocked_damage_types = {
|
||||
|
@ -48,10 +50,10 @@ if exchangeclone.mcl then
|
|||
name = "dark_matter",
|
||||
description = "Dark Matter",
|
||||
descriptions = exchangeclone.mineclonia and {
|
||||
head = "Dark Matter Helmet",
|
||||
torso = "Dark Matter Chestplate",
|
||||
legs = "Dark Matter Leggings",
|
||||
feet = "Dark Matter Boots"
|
||||
head = S("Dark Matter Helmet"),
|
||||
torso = S("Dark Matter Chestplate"),
|
||||
legs = S("Dark Matter Leggings"),
|
||||
feet = S("Dark Matter Boots")
|
||||
},
|
||||
durability = -1,
|
||||
enchantability = 0,
|
||||
|
@ -76,10 +78,10 @@ if exchangeclone.mcl then
|
|||
name = "red_matter",
|
||||
description = "Red Matter",
|
||||
descriptions = exchangeclone.mineclonia and {
|
||||
head = "Red Matter Helmet",
|
||||
torso = "Red Matter Chestplate",
|
||||
legs = "Red Matter Leggings",
|
||||
feet = "Red Matter Boots"
|
||||
head = S("Red Matter Helmet"),
|
||||
torso = S("Red Matter Chestplate"),
|
||||
legs = S("Red Matter Leggings"),
|
||||
feet = S("Red Matter Boots")
|
||||
},
|
||||
durability = -1,
|
||||
enchantability = 0,
|
||||
|
@ -140,7 +142,7 @@ if exchangeclone.mcl then
|
|||
end)
|
||||
else
|
||||
armor:register_armor("exchangeclone:helmet_dark_matter", {
|
||||
description = "Dark Matter Helmet",
|
||||
description = S("Dark Matter Helmet"),
|
||||
texture = get_armor_texture("helmet","dark"),
|
||||
inventory_image = get_armor_texture("inv_helmet","dark"),
|
||||
preview = get_armor_texture("helmet","dark", true),
|
||||
|
@ -148,7 +150,7 @@ else
|
|||
groups = {armor_head = 1, dark_matter_armor = 1, armor_heal = 5, armor_fire = 1, armor_water = 1, disable_repair = 1, exchangeclone_upgradable = 1}
|
||||
})
|
||||
armor:register_armor("exchangeclone:chestplate_dark_matter", {
|
||||
description = "Dark Matter Chestplate",
|
||||
description = S("Dark Matter Chestplate"),
|
||||
texture = get_armor_texture("chestplate","dark"),
|
||||
inventory_image = get_armor_texture("inv_chestplate","dark"),
|
||||
preview = get_armor_texture("chestplate","dark", true),
|
||||
|
@ -156,7 +158,7 @@ else
|
|||
groups = {armor_torso = 1, dark_matter_armor = 1, armor_heal = 8, armor_fire = 2, armor_water = 1, disable_repair = 1, exchangeclone_upgradable = 1}
|
||||
})
|
||||
armor:register_armor("exchangeclone:leggings_dark_matter", {
|
||||
description = "Dark Matter Leggings",
|
||||
description = S("Dark Matter Leggings"),
|
||||
texture = get_armor_texture("leggings","dark"),
|
||||
inventory_image = get_armor_texture("inv_leggings","dark"),
|
||||
preview = get_armor_texture("leggings","dark", true),
|
||||
|
@ -164,7 +166,7 @@ else
|
|||
groups = {armor_legs = 1, dark_matter_armor = 1, armor_heal = 7, armor_fire = 1, armor_water = 1, disable_repair = 1, exchangeclone_upgradable = 1}
|
||||
})
|
||||
armor:register_armor("exchangeclone:boots_dark_matter", {
|
||||
description = "Dark Matter Boots",
|
||||
description = S("Dark Matter Boots"),
|
||||
texture = get_armor_texture("boots","dark"),
|
||||
inventory_image = get_armor_texture("inv_boots","dark"),
|
||||
preview = get_armor_texture("boots","dark", true),
|
||||
|
@ -172,7 +174,7 @@ else
|
|||
groups = {armor_feet = 1, dark_matter_armor = 1, armor_heal = 4, armor_fire = 1, armor_water = 1, disable_repair = 1, exchangeclone_upgradable = 1}
|
||||
})
|
||||
armor:register_armor("exchangeclone:shield_dark_matter", {
|
||||
description = "Dark Matter Shield",
|
||||
description = S("Dark Matter Shield"),
|
||||
texture = get_armor_texture("shield","dark"),
|
||||
inventory_image = get_armor_texture("inv_shield","dark"),
|
||||
preview = get_armor_texture("shield","dark", true),
|
||||
|
@ -180,7 +182,7 @@ else
|
|||
groups = {armor_shield = 1, dark_matter_armor = 1, armor_heal = 7, armor_fire = 1, armor_water = 1, disable_repair = 1, exchangeclone_upgradable = 1}
|
||||
})
|
||||
armor:register_armor("exchangeclone:helmet_red_matter", {
|
||||
description = "Red Matter Helmet",
|
||||
description = S("Red Matter Helmet"),
|
||||
texture = get_armor_texture("helmet","red"),
|
||||
inventory_image = get_armor_texture("inv_helmet","red"),
|
||||
preview = get_armor_texture("helmet","red", true),
|
||||
|
@ -188,7 +190,7 @@ else
|
|||
groups = {armor_head = 1, red_matter_armor = 1, armor_heal = 10, armor_fire = 2, armor_water = 1, disable_repair = 1, exchangeclone_upgradable = 1}
|
||||
})
|
||||
armor:register_armor("exchangeclone:chestplate_red_matter", {
|
||||
description = "Red Matter Chestplate",
|
||||
description = S("Red Matter Chestplate"),
|
||||
texture = get_armor_texture("chestplate","red"),
|
||||
inventory_image = get_armor_texture("inv_chestplate","red"),
|
||||
preview = get_armor_texture("chestplate","red", true),
|
||||
|
@ -196,7 +198,7 @@ else
|
|||
groups = {armor_torso = 1, red_matter_armor = 1, armor_heal = 16, armor_fire = 2, armor_water = 1, disable_repair = 1, exchangeclone_upgradable = 1}
|
||||
})
|
||||
armor:register_armor("exchangeclone:leggings_red_matter", {
|
||||
description = "Red Matter Leggings",
|
||||
description = S("Red Matter Leggings"),
|
||||
texture = get_armor_texture("leggings","red"),
|
||||
inventory_image = get_armor_texture("inv_leggings","red"),
|
||||
preview = get_armor_texture("leggings","red", true),
|
||||
|
@ -204,7 +206,7 @@ else
|
|||
groups = {armor_legs = 1, red_matter_armor = 1, armor_heal = 14, armor_fire = 2, armor_water = 1, disable_repair = 1, exchangeclone_upgradable = 1}
|
||||
})
|
||||
armor:register_armor("exchangeclone:boots_red_matter", {
|
||||
description = "Red Matter Boots",
|
||||
description = S("Red Matter Boots"),
|
||||
texture = get_armor_texture("boots","red"),
|
||||
inventory_image = get_armor_texture("inv_boots","red"),
|
||||
preview = get_armor_texture("boots","red", true),
|
||||
|
@ -212,7 +214,7 @@ else
|
|||
groups = {armor_feet = 1, red_matter_armor = 1, armor_heal = 8, armor_fire = 2, armor_water = 1, disable_repair = 1, exchangeclone_upgradable = 1}
|
||||
})
|
||||
armor:register_armor("exchangeclone:shield_red_matter", {
|
||||
description = "Red Matter Shield",
|
||||
description = S("Red Matter Shield"),
|
||||
texture = get_armor_texture("shield","red"),
|
||||
inventory_image = get_armor_texture("inv_shield","red"),
|
||||
preview = get_armor_texture("shield","red", true),
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
local S = minetest.get_translator()
|
||||
|
||||
exchangeclone.axe_action = {
|
||||
start_action = function(player, center, range)
|
||||
start_action = function(player, center, range, itemstack)
|
||||
if exchangeclone.check_cooldown(player, "axe") then return end
|
||||
local data = {}
|
||||
data.player_energy = exchangeclone.get_player_energy(player)
|
||||
data.energy_cost = 0
|
||||
if exchangeclone.mcl then
|
||||
data.strip = not player:get_player_control().sneak
|
||||
end
|
||||
if range > 0 or not data.strip then
|
||||
exchangeclone.play_ability_sound(player)
|
||||
end
|
||||
data.itemstack = itemstack
|
||||
return data
|
||||
end,
|
||||
action = function(player, pos, node, data)
|
||||
if data.energy_cost + 8 > data.player_energy then return end
|
||||
local node_def = minetest.registered_items[node.name]
|
||||
if (node_def.groups.tree or node_def.groups.leaves) then
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
|
@ -21,12 +21,10 @@ exchangeclone.axe_action = {
|
|||
else
|
||||
if data.strip then
|
||||
if node_def._mcl_stripped_variant ~= nil then
|
||||
data.energy_cost = data.energy_cost + 4
|
||||
minetest.swap_node(pos, {name=node_def._mcl_stripped_variant, param2=node.param2})
|
||||
end
|
||||
else
|
||||
data.energy_cost = data.energy_cost + 8
|
||||
local drops = minetest.get_node_drops(node.name, "exchangeclone:red_matter_axe")
|
||||
local drops = minetest.get_node_drops(node.name, data.itemstack)
|
||||
exchangeclone.drop_items_on_player(pos, drops, player)
|
||||
minetest.set_node(pos, {name = "air"})
|
||||
end
|
||||
|
@ -36,7 +34,6 @@ exchangeclone.axe_action = {
|
|||
end,
|
||||
end_action = function(player, center, range, data)
|
||||
if range > 0 or not data.strip then
|
||||
exchangeclone.set_player_energy(player, data.player_energy - data.energy_cost)
|
||||
exchangeclone.start_cooldown(player, "axe", range/6)
|
||||
end
|
||||
end
|
||||
|
@ -60,12 +57,12 @@ local function axe_on_place(itemstack, player, pointed_thing)
|
|||
|
||||
local center = player:get_pos()
|
||||
if pointed_thing.type == "node" then center = pointed_thing.under end
|
||||
exchangeclone.node_radius_action(player, center, range, exchangeclone.axe_action)
|
||||
exchangeclone.node_radius_action(player, center, range, exchangeclone.axe_action, itemstack)
|
||||
return itemstack
|
||||
end
|
||||
|
||||
minetest.register_tool("exchangeclone:dark_matter_axe", {
|
||||
description = "Dark Matter Axe",
|
||||
description = S("Dark Matter Axe"),
|
||||
wield_image = "exchangeclone_dark_matter_axe.png",
|
||||
inventory_image = "exchangeclone_dark_matter_axe.png",
|
||||
groups = { tool=1, axe=1, dig_speed_class=7, enchantability=0, disable_repair = 1, fire_immune = 1, exchangeclone_upgradable = 1},
|
||||
|
@ -90,7 +87,7 @@ minetest.register_tool("exchangeclone:dark_matter_axe", {
|
|||
})
|
||||
|
||||
minetest.register_tool("exchangeclone:red_matter_axe", {
|
||||
description = "Red Matter Axe",
|
||||
description = S("Red Matter Axe"),
|
||||
wield_image = "exchangeclone_red_matter_axe.png",
|
||||
inventory_image = "exchangeclone_red_matter_axe.png",
|
||||
groups = { tool=1, axe=1, dig_speed_class=8, enchantability=0, disable_repair = 1, fire_immune = 1, exchangeclone_upgradable = 1},
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
local S = minetest.get_translator()
|
||||
|
||||
local storage = minetest.get_mod_storage()
|
||||
exchangeclone.bauble_data = minetest.deserialize(storage:get_string("bauble_data"))
|
||||
|
||||
|
@ -73,13 +75,13 @@ function exchangeclone.show_baubles(player)
|
|||
end
|
||||
|
||||
minetest.register_tool("exchangeclone:bauble_accessor", {
|
||||
description = "Bauble Accessor",
|
||||
description = S("Bauble Accessor"),
|
||||
groups = {disable_repair = 1},
|
||||
})
|
||||
|
||||
minetest.register_tool("exchangeclone:repair_talisman", {
|
||||
description = "Repair Talisman",
|
||||
groups = {disable_repair = 1, bauble = 1}, -- kind of ironic :D
|
||||
description = S("Repair Talisman"),
|
||||
groups = {disable_repair = 1, bauble = 1},
|
||||
bauble_info = {
|
||||
action = "repair",
|
||||
hotbar = true
|
||||
|
@ -87,8 +89,8 @@ minetest.register_tool("exchangeclone:repair_talisman", {
|
|||
})
|
||||
|
||||
minetest.register_tool("exchangeclone:gem_of_eternal_density", {
|
||||
description = "Gem of Eternal Density",
|
||||
groups = {disable_repair = 1, bauble = 1}, -- kind of ironic :D
|
||||
description = S("Gem of Eternal Density"),
|
||||
groups = {disable_repair = 1, bauble = 1},
|
||||
bauble_info = {
|
||||
action = "density",
|
||||
hotbar = true
|
||||
|
|
|
@ -1,47 +1,25 @@
|
|||
local function get_constructor_formspec()
|
||||
if not exchangeclone.mcl then
|
||||
local formspec = {
|
||||
"size[8,9]",
|
||||
"label[2,1;Orb]",
|
||||
"list[context;fuel;2,2;1,1;]",
|
||||
"label[3,1;Source]",
|
||||
"list[context;src;3,2;1,1;]",
|
||||
"label[5,1;Output]",
|
||||
"list[context;dst;5,2;1,1;]",
|
||||
"list[current_player;main;0,5;8,4;]",
|
||||
"listring[current_player;main]",
|
||||
"listring[context;src]",
|
||||
"listring[current_player;main]",
|
||||
"listring[context;fuel]",
|
||||
"listring[current_player;main]",
|
||||
"listring[context;dst]",
|
||||
}
|
||||
return table.concat(formspec, "")
|
||||
else
|
||||
local formspec = {
|
||||
"size[9,10]",
|
||||
"label[2,1;Orb]",
|
||||
"list[context;fuel;2,2;1,1;]",
|
||||
mcl_formspec.get_itemslot_bg(2,2,1,1),
|
||||
"label[3,1;Source]",
|
||||
"list[context;src;3,2;1,1;]",
|
||||
mcl_formspec.get_itemslot_bg(3,2,1,1),
|
||||
"label[5,1;Output]",
|
||||
"list[context;dst;5,2;1,1;]",
|
||||
mcl_formspec.get_itemslot_bg(5,2,1,1),
|
||||
"list[current_player;main;0,5;9,3;9]",
|
||||
mcl_formspec.get_itemslot_bg(0,5,9,3),
|
||||
"list[current_player;main;0,8.5;9,1;]",
|
||||
mcl_formspec.get_itemslot_bg(0,8.5,9,1),
|
||||
"listring[current_player;main]",
|
||||
"listring[context;src]",
|
||||
"listring[current_player;main]",
|
||||
"listring[context;fuel]",
|
||||
"listring[current_player;main]",
|
||||
"listring[context;dst]",
|
||||
}
|
||||
return table.concat(formspec, "")
|
||||
end
|
||||
local S = minetest.get_translator()
|
||||
|
||||
local formspec =
|
||||
"size["..(exchangeclone.mcl and 9 or 8)..",9]"..
|
||||
"label[2,1;"..S("Orb").."]"..
|
||||
"list[context;fuel;2,2;1,1;]"..
|
||||
"label[3,1;"..S("Source").."]"..
|
||||
"list[context;src;3,2;1,1;]"..
|
||||
"label[5,1;"..S("Output").."]"..
|
||||
"list[context;dst;5,2;1,1;]"..
|
||||
exchangeclone.inventory_formspec(0,5)..
|
||||
"listring[current_player;main]"..
|
||||
"listring[context;src]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[context;fuel]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[context;dst]"
|
||||
if exchangeclone.mcl then
|
||||
formspec = formspec..
|
||||
mcl_formspec.get_itemslot_bg(2,2,1,1)..
|
||||
mcl_formspec.get_itemslot_bg(3,2,1,1)..
|
||||
mcl_formspec.get_itemslot_bg(5,2,1,1)
|
||||
end
|
||||
|
||||
minetest.register_alias("exchangeclone:element_constructor", "exchangeclone:constructor")
|
||||
|
@ -53,7 +31,7 @@ minetest.register_lbm({
|
|||
run_at_every_load = false,
|
||||
action = function(pos, node)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", "size[3,1]label[0,0;Break and replace.\nNothing will be lost.]")
|
||||
meta:set_string("formspec", "size[3,1]label[0,0;"..S("Break and replace.").."\n"..S("Nothing will be lost.").."]")
|
||||
end,
|
||||
})
|
||||
|
||||
|
@ -80,24 +58,11 @@ local function constructor_action(pos)
|
|||
if not inv:is_empty("src") then
|
||||
-- make sure the stack at dst is same as the src (including enchantments)
|
||||
if not inv:is_empty("dst") then
|
||||
if src_stack:get_name() ~= dst_stack:get_name() then
|
||||
if exchangeclone.mcl then
|
||||
if not(string.sub(src_stack:get_name(), -10, -1) == "_enchanted"
|
||||
and string.sub(src_stack:get_name(), 1, -11) == dst_stack:get_name()
|
||||
and src_stack:get_name() ~= "mcl_core:apple_gold_enchanted") then
|
||||
return
|
||||
end
|
||||
else
|
||||
return
|
||||
end
|
||||
if exchangeclone.handle_alias(src_stack) ~= dst_stack:get_name() then
|
||||
return
|
||||
end
|
||||
end
|
||||
local result = src_stack:get_name()
|
||||
if exchangeclone.mcl
|
||||
and string.sub(result, -10, -1) == "_enchanted"
|
||||
and result ~= "mcl_core:apple_gold_enchanted" then
|
||||
result = string.sub(src_stack:get_name(), 1, -11)
|
||||
end
|
||||
local result = exchangeclone.handle_alias(src_stack)
|
||||
-- make sure orb/player has enough energy
|
||||
local current_energy
|
||||
if using_orb then
|
||||
|
@ -117,6 +82,15 @@ local function constructor_action(pos)
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
if inv:get_stack("src", 1):is_empty() then
|
||||
timer:stop()
|
||||
else
|
||||
if not timer:is_started() then
|
||||
timer:start(1) -- keep trying to construct if there are items in the src stack
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function on_construct(pos)
|
||||
|
@ -125,8 +99,8 @@ local function on_construct(pos)
|
|||
inv:set_size("fuel", 1)
|
||||
inv:set_size("src", 1)
|
||||
inv:set_size("dst", 1)
|
||||
meta:set_string("formspec", get_constructor_formspec())
|
||||
meta:set_string("infotext", "Constructor")
|
||||
meta:set_string("formspec", formspec)
|
||||
meta:set_string("infotext", S("Constructor"))
|
||||
end
|
||||
|
||||
local function allow_metadata_inventory_put(pos, listname, index, stack, player)
|
||||
|
@ -172,7 +146,7 @@ local function on_blast(pos)
|
|||
end
|
||||
|
||||
minetest.register_node("exchangeclone:constructor", {
|
||||
description = "Constructor",
|
||||
description = S("Constructor"),
|
||||
tiles = {
|
||||
"exchangeclone_constructor_up.png",
|
||||
"exchangeclone_constructor_down.png",
|
||||
|
@ -218,6 +192,7 @@ minetest.register_node("exchangeclone:constructor", {
|
|||
allow_metadata_inventory_put = allow_metadata_inventory_put,
|
||||
allow_metadata_inventory_move = allow_metadata_inventory_move,
|
||||
allow_metadata_inventory_take = allow_metadata_inventory_take,
|
||||
on_timer = constructor_action,
|
||||
})
|
||||
|
||||
local recipe_ingredient = "default:pick_diamond"
|
||||
|
|
|
@ -1,16 +1,17 @@
|
|||
local charcoal_itemstring = exchangeclone.mcl and "mcl_core:charcoal" or "group:tree"
|
||||
local redstone_itemstring = exchangeclone.mcl and "mcl_core:redstone" or "default:obsidian"
|
||||
local S = minetest.get_translator()
|
||||
|
||||
local charcoal_itemstring = exchangeclone.mcl and "mcl_core:charcoal_lump" or "group:tree"
|
||||
|
||||
minetest.register_craftitem("exchangeclone:low_covalence_dust", {
|
||||
description = "Low Covalence Dust"
|
||||
description = S("Low Covalence Dust")
|
||||
})
|
||||
|
||||
minetest.register_craftitem("exchangeclone:medium_covalence_dust", {
|
||||
description = "Medium Covalence Dust"
|
||||
description = S("Medium Covalence Dust")
|
||||
})
|
||||
|
||||
minetest.register_craftitem("exchangeclone:high_covalence_dust", {
|
||||
description = "High Covalence Dust"
|
||||
description = S("High Covalence Dust")
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
|
@ -33,7 +34,7 @@ minetest.register_craft({
|
|||
output = "exchangeclone:medium_covalence_dust 40",
|
||||
type = "shapeless",
|
||||
recipe = {
|
||||
exchangeclone.itemstrings.iron, redstone_itemstring
|
||||
exchangeclone.itemstrings.iron, exchangeclone.itemstrings.redstoneworth
|
||||
}
|
||||
})
|
||||
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
local S = minetest.get_translator()
|
||||
|
||||
local function get_level(level)
|
||||
if exchangeclone.mcl then
|
||||
return nil
|
||||
|
@ -7,21 +9,21 @@ local function get_level(level)
|
|||
end
|
||||
|
||||
minetest.register_craftitem("exchangeclone:alchemical_coal", {
|
||||
description = "Alchemical Coal",
|
||||
description = S("Alchemical Coal"),
|
||||
wield_image = "exchangeclone_alchemical_coal.png",
|
||||
inventory_image = "exchangeclone_alchemical_coal.png",
|
||||
groups = { craftitem=1},
|
||||
})
|
||||
|
||||
minetest.register_craftitem("exchangeclone:mobius_fuel", {
|
||||
description = "Mobius Fuel",
|
||||
description = S("Mobius Fuel"),
|
||||
wield_image = "exchangeclone_mobius_fuel.png",
|
||||
inventory_image = "exchangeclone_mobius_fuel.png",
|
||||
groups = { craftitem=1},
|
||||
})
|
||||
|
||||
minetest.register_craftitem("exchangeclone:aeternalis_fuel", {
|
||||
description = "Aeternalis Fuel",
|
||||
description = S("Aeternalis Fuel"),
|
||||
wield_image = "exchangeclone_aeternalis_fuel.png",
|
||||
inventory_image = "exchangeclone_aeternalis_fuel.png",
|
||||
groups = { craftitem=1},
|
||||
|
@ -46,21 +48,21 @@ minetest.register_craft({
|
|||
})
|
||||
|
||||
minetest.register_craftitem("exchangeclone:dark_matter", {
|
||||
description = "Dark Matter Orb",
|
||||
description = S("Dark Matter Orb"),
|
||||
wield_image = "exchangeclone_dark_matter.png",
|
||||
inventory_image = "exchangeclone_dark_matter.png",
|
||||
groups = {craftitem = 1}
|
||||
})
|
||||
|
||||
minetest.register_craftitem("exchangeclone:red_matter", {
|
||||
description = "Red Matter Orb",
|
||||
description = S("Red Matter Orb"),
|
||||
wield_image = "exchangeclone_red_matter.png",
|
||||
inventory_image = "exchangeclone_red_matter.png",
|
||||
groups = {craftitem = 1},
|
||||
})
|
||||
|
||||
minetest.register_node("exchangeclone:dark_matter_block", {
|
||||
description = "Dark Matter Block",
|
||||
description = S("Dark Matter Block"),
|
||||
tiles = {"exchangeclone_dark_matter_block.png"},
|
||||
is_ground_content = false,
|
||||
sounds = exchangeclone.sound_mod.node_sound_stone_defaults(),
|
||||
|
@ -70,7 +72,7 @@ minetest.register_node("exchangeclone:dark_matter_block", {
|
|||
})
|
||||
|
||||
minetest.register_node("exchangeclone:red_matter_block", {
|
||||
description = "Red Matter Block",
|
||||
description = S("Red Matter Block"),
|
||||
tiles = {"exchangeclone_red_matter_block.png"},
|
||||
is_ground_content = false,
|
||||
light_source = 14,
|
||||
|
|
|
@ -1,38 +1,22 @@
|
|||
local function get_deconstructor_formspec()
|
||||
if not exchangeclone.mcl then
|
||||
local formspec = {
|
||||
"size[8,9]",
|
||||
"label[2,1;Items]",
|
||||
"list[context;src;2,2;1,1;]",
|
||||
"label[5,1;Orb]",
|
||||
"list[context;fuel;5,2;1,1;]",
|
||||
"list[current_player;main;0,5;8,4;]",
|
||||
"listring[current_player;main]",
|
||||
"listring[context;src]",
|
||||
"listring[current_player;main]",
|
||||
"listring[context;fuel]",
|
||||
}
|
||||
return table.concat(formspec, "")
|
||||
else
|
||||
local formspec = {
|
||||
"size[9,10]",
|
||||
"label[2,1;Items]",
|
||||
"list[context;src;2,2;1,1;]",
|
||||
mcl_formspec.get_itemslot_bg(2,2,1,1),
|
||||
"label[5,1;Orb]",
|
||||
"list[context;fuel;5,2;1,1;]",
|
||||
mcl_formspec.get_itemslot_bg(5,2,1,1),
|
||||
"list[current_player;main;0,5;9,3;9]",
|
||||
mcl_formspec.get_itemslot_bg(0,5,9,3),
|
||||
"list[current_player;main;0,8.5;9,1;]",
|
||||
mcl_formspec.get_itemslot_bg(0,8.5,9,1),
|
||||
"listring[current_player;main]",
|
||||
"listring[context;src]",
|
||||
"listring[current_player;main]",
|
||||
"listring[context;fuel]"
|
||||
}
|
||||
return table.concat(formspec, "")
|
||||
end
|
||||
local S = minetest.get_translator()
|
||||
|
||||
local formspec =
|
||||
"size["..(exchangeclone.mcl and 9 or 8)..",9]"..
|
||||
"label[2,1;"..S("Input").."]"..
|
||||
"list[context;src;2,2;1,1;]"..
|
||||
"label[5,1;"..S("Orb").."]"..
|
||||
"list[context;fuel;5,2;1,1;]"..
|
||||
exchangeclone.inventory_formspec(0,5)..
|
||||
"listring[current_player;main]"..
|
||||
"listring[context;src]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[context;fuel]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[context;dst]"
|
||||
if exchangeclone.mcl then
|
||||
formspec = formspec..
|
||||
mcl_formspec.get_itemslot_bg(2,2,1,1)..
|
||||
mcl_formspec.get_itemslot_bg(5,2,1,1)
|
||||
end
|
||||
|
||||
minetest.register_alias("exchangeclone:element_deconstructor", "exchangeclone:deconstructor")
|
||||
|
@ -44,7 +28,7 @@ minetest.register_lbm({
|
|||
run_at_every_load = false,
|
||||
action = function(pos, node)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", "size[3,1]label[0,0;Break and replace.\nNothing will be lost.]")
|
||||
meta:set_string("formspec", "size[3,1]label[0,0;"..S("Break and replace.").."\n"..S("Nothing will be lost.").."]")
|
||||
end,
|
||||
})
|
||||
|
||||
|
@ -55,18 +39,20 @@ local function can_dig(pos, player)
|
|||
return inv:is_empty("src") and inv:is_empty("fuel") and inv:is_empty("main")
|
||||
end
|
||||
|
||||
local function deconstructor_action(pos)
|
||||
local function deconstructor_action(pos, elapsed)
|
||||
local limit = exchangeclone.orb_max
|
||||
local using_orb = true
|
||||
local player
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
|
||||
if inv:get_stack("fuel", 1):get_name() ~= "exchangeclone:exchange_orb" then
|
||||
limit = exchangeclone.limit
|
||||
using_orb = false
|
||||
player = minetest.get_player_by_name(meta:get_string("exchangeclone_placer"))
|
||||
if not (player and player ~= "") then return end
|
||||
end
|
||||
|
||||
local stack = inv:get_stack("src", 1)
|
||||
local individual_energy_value = exchangeclone.get_item_energy(stack:get_name())
|
||||
if not (individual_energy_value and individual_energy_value > 0) then return end
|
||||
|
@ -77,6 +63,7 @@ local function deconstructor_action(pos)
|
|||
if stack:get_name() == "exchangeclone:exchange_orb" then
|
||||
individual_energy_value = individual_energy_value + exchangeclone.get_orb_itemstack_energy(stack)
|
||||
end
|
||||
|
||||
local current_energy
|
||||
if using_orb then
|
||||
current_energy = exchangeclone.get_orb_energy(inv, "fuel", 1)
|
||||
|
@ -88,6 +75,7 @@ local function deconstructor_action(pos)
|
|||
local energy_value = individual_energy_value * add_count
|
||||
local result = current_energy + energy_value
|
||||
if result < 0 or result > limit then return end
|
||||
|
||||
if using_orb then
|
||||
exchangeclone.set_orb_energy(inv, "fuel", 1, result)
|
||||
else
|
||||
|
@ -96,6 +84,15 @@ local function deconstructor_action(pos)
|
|||
stack:set_count(stack:get_count() - add_count)
|
||||
if stack:get_count() == 0 then stack = ItemStack("") end
|
||||
inv:set_stack("src", 1, stack)
|
||||
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
if inv:get_stack("src", 1):is_empty() then
|
||||
timer:stop()
|
||||
else
|
||||
if not timer:is_started() then
|
||||
timer:start(1) -- keep trying to deconstruct if there are items in the src stack
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function on_construct(pos)
|
||||
|
@ -103,8 +100,8 @@ local function on_construct(pos)
|
|||
local inv = meta:get_inventory()
|
||||
inv:set_size("src", 1)
|
||||
inv:set_size("fuel", 1)
|
||||
meta:set_string("formspec", get_deconstructor_formspec())
|
||||
meta:set_string("infotext", "Deconstructor")
|
||||
meta:set_string("formspec", formspec)
|
||||
meta:set_string("infotext", S("Deconstructor"))
|
||||
deconstructor_action(pos, 0)
|
||||
end
|
||||
|
||||
|
@ -150,7 +147,7 @@ local function on_blast(pos)
|
|||
end
|
||||
|
||||
minetest.register_node("exchangeclone:deconstructor", {
|
||||
description = "Deconstructor",
|
||||
description = S("Deconstructor"),
|
||||
tiles = {
|
||||
"exchangeclone_deconstructor_up.png",
|
||||
"exchangeclone_deconstructor_down.png",
|
||||
|
|
|
@ -1,30 +1,13 @@
|
|||
local function get_energy_collector_formspec()
|
||||
local formspec
|
||||
if not exchangeclone.mcl then
|
||||
formspec = {
|
||||
"size[8,9]",
|
||||
"label[3,2;Orb]",
|
||||
"list[context;main;4,2;1,1;]",
|
||||
"list[current_player;main;0,5;8,4;]",
|
||||
"listring[current_player;main]",
|
||||
"listring[context;main]"
|
||||
}
|
||||
else
|
||||
formspec = {
|
||||
"size[9,10]",
|
||||
"label[3,2;Orb]",
|
||||
"list[context;main;4,2;1,1;]",
|
||||
mcl_formspec.get_itemslot_bg(4,2,1,1),
|
||||
"list[current_player;main;0,5;9,3;9]",
|
||||
mcl_formspec.get_itemslot_bg(0,5,9,3),
|
||||
"list[current_player;main;0,8.5;9,1;]",
|
||||
mcl_formspec.get_itemslot_bg(0,8.5,9,1),
|
||||
"listring[current_player;main]",
|
||||
"listring[context;main]"
|
||||
}
|
||||
end
|
||||
return table.concat(formspec, "")
|
||||
end
|
||||
local S = minetest.get_translator()
|
||||
|
||||
local formspec =
|
||||
"size["..(exchangeclone.mcl and 9 or 8)..",9]"..
|
||||
"label[3,2;"..S("Orb").."]"..
|
||||
"list[context;main;4,2;1,1;]"..
|
||||
exchangeclone.inventory_formspec(0,5)..
|
||||
"listring[current_player;main]"..
|
||||
"listring[context;main]"..
|
||||
exchangeclone.mcl and mcl_formspec.get_itemslot_bg(4,2,1,1)
|
||||
|
||||
minetest.register_alias("exchangeclone:energy_collector", "exchangeclone:energy_collector_mk1")
|
||||
|
||||
|
@ -35,7 +18,7 @@ minetest.register_lbm({
|
|||
run_at_every_load = false,
|
||||
action = function(pos, node)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", "size[3,1]label[0,0;Break and replace.\nNothing will be lost.]")
|
||||
meta:set_string("formspec", "size[3,1]label[0,0;"..S("Break and replace.").."\n"..S("Nothing will be lost.").."]")
|
||||
end,
|
||||
})
|
||||
|
||||
|
@ -114,8 +97,7 @@ local function on_timer(pos, elapsed)
|
|||
if placer and placer ~= "" then
|
||||
local player = minetest.get_player_by_name(placer)
|
||||
if player then
|
||||
local player_energy = exchangeclone.get_player_energy(player)
|
||||
exchangeclone.set_player_energy(player, player_energy + amount)
|
||||
exchangeclone.add_player_energy(player, amount)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -129,7 +111,7 @@ local function on_construct(pos)
|
|||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("main", 1)
|
||||
meta:set_string("formspec", get_energy_collector_formspec())
|
||||
meta:set_string("formspec", formspec)
|
||||
minetest.get_node_timer(pos):start(1)
|
||||
end
|
||||
|
||||
|
@ -221,7 +203,7 @@ function exchangeclone.register_energy_collector(itemstring, name, amount, modif
|
|||
local meta = minetest.get_meta(pos)
|
||||
meta:set_int("collector_amount", amount)
|
||||
meta:set_string("exchangeclone_placer", player_name)
|
||||
meta:set_string("infotext", name.."\nOwned by"..player_name)
|
||||
meta:set_string("infotext", name.."\n"..S("Owned by ")..player_name)
|
||||
end,
|
||||
on_blast = on_blast,
|
||||
allow_metadata_inventory_put = allow_metadata_inventory_put,
|
||||
|
@ -273,35 +255,35 @@ if exchangeclone.mcl then
|
|||
chest = "mcl_chests:chest"
|
||||
end
|
||||
|
||||
exchangeclone.register_energy_collector("exchangeclone:energy_collector_mk1", "Energy Collector MK1", 4, "", {
|
||||
exchangeclone.register_energy_collector("exchangeclone:energy_collector_mk1", S("Energy Collector MK1"), 4, "", {
|
||||
{glass, glass, glass},
|
||||
{"exchangeclone:exchange_orb", chest, "exchangeclone:exchange_orb"},
|
||||
{iron, iron, iron}
|
||||
}
|
||||
)
|
||||
|
||||
exchangeclone.register_energy_collector("exchangeclone:energy_collector_mk2", "Energy Collector MK2", 12, "^[multiply:#555555", {
|
||||
exchangeclone.register_energy_collector("exchangeclone:energy_collector_mk2", S("Energy Collector MK2"), 12, "^[multiply:#555555", {
|
||||
{iron, iron, iron},
|
||||
{"exchangeclone:energy_collector_mk1", "exchangeclone:energy_collector_mk1", "exchangeclone:energy_collector_mk1"},
|
||||
{iron, iron, iron}
|
||||
}
|
||||
)
|
||||
|
||||
exchangeclone.register_energy_collector("exchangeclone:energy_collector_mk3", "Energy Collector MK3", 40, "^[multiply:#770000", {
|
||||
exchangeclone.register_energy_collector("exchangeclone:energy_collector_mk3", S("Energy Collector MK3"), 40, "^[multiply:#770000", {
|
||||
{iron, iron, iron},
|
||||
{"exchangeclone:energy_collector_mk2", "exchangeclone:energy_collector_mk2", "exchangeclone:energy_collector_mk2"},
|
||||
{iron, iron, iron}
|
||||
}
|
||||
)
|
||||
|
||||
exchangeclone.register_energy_collector("exchangeclone:energy_collector_mk4", "Energy Collector MK4", 160, "^[multiply:#007700", {
|
||||
exchangeclone.register_energy_collector("exchangeclone:energy_collector_mk4", S("Energy Collector MK4"), 160, "^[multiply:#007700", {
|
||||
{iron, iron, iron},
|
||||
{"exchangeclone:energy_collector_mk3", "exchangeclone:energy_collector_mk3", "exchangeclone:energy_collector_mk3"},
|
||||
{iron, iron, iron}
|
||||
}
|
||||
)
|
||||
|
||||
exchangeclone.register_energy_collector("exchangeclone:energy_collector_mk5", "Energy Collector MK5", 640, "^[multiply:#000077", {
|
||||
exchangeclone.register_energy_collector("exchangeclone:energy_collector_mk5", S("Energy Collector MK5"), 640, "^[multiply:#000077", {
|
||||
{iron, iron, iron},
|
||||
{"exchangeclone:energy_collector_mk4", "exchangeclone:energy_collector_mk4", "exchangeclone:energy_collector_mk4"},
|
||||
{iron, iron, iron}
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
local S = minetest.get_translator()
|
||||
|
||||
-- Everything with the exchangeclone_ore group is also included (see pickaxes.lua)
|
||||
-- This is pretty much the one thing I can't really figure out how to automate.
|
||||
local ores = {
|
||||
["mcl_raw_ores:raw_gold"] = true,
|
||||
["mcl_raw_ores:raw_iron"] = true,
|
||||
|
@ -31,7 +34,7 @@ end
|
|||
|
||||
local LIGHT_ACTIVE_FURNACE = 13
|
||||
|
||||
--90% of the code is copied from MineClone's blast furnaces.
|
||||
-- Modified from MineClone's blast furnaces.
|
||||
|
||||
--
|
||||
-- Formspecs
|
||||
|
@ -43,7 +46,7 @@ local base_formspec =
|
|||
--"image_button[8,0;1,1;craftguide_book.png;craftguide;]"..
|
||||
--"tooltip[craftguide;"..minetest.formspec_escape("Recipe book").."]"..
|
||||
"size[10,8.75]"..
|
||||
"label[0,4;Inventory]"..
|
||||
"label[0,4;"..S("Inventory").."]"..
|
||||
exchangeclone.inventory_formspec(0,4.5)..
|
||||
"list[context;src;2.9,0.5;1,1]"..
|
||||
"list[context;fuel;2.9,2.5;1,1;]"..
|
||||
|
@ -64,12 +67,12 @@ if exchangeclone.mcl then
|
|||
mcl_formspec.get_itemslot_bg(5.75,1.5,1,1)
|
||||
end
|
||||
|
||||
local function inactive_formspec(type)
|
||||
local num_columns = (type == "Dark" and 2) or 3
|
||||
local function inactive_formspec(matter_type)
|
||||
local num_columns = (matter_type == "Dark" and 2) or 3
|
||||
local result = base_formspec..
|
||||
"list[context;src;0,0.5;"..tostring(num_columns)..",3;1]"..
|
||||
"list[context;dst;7,0.5;"..tostring(num_columns)..",3;1]"..
|
||||
"label[2.9,0;"..type.." Matter Furnace]"..
|
||||
"label[2.9,0;"..S("@1 Matter Furnace", S(matter_type)).."]"..
|
||||
"image[2.9,1.5;1,1;default_furnace_fire_bg.png]"..
|
||||
"image[4.1,1.5;1.5,1;gui_furnace_arrow_bg.png^[transformR270]"
|
||||
if exchangeclone.mcl then
|
||||
|
@ -80,16 +83,16 @@ local function inactive_formspec(type)
|
|||
return result
|
||||
end
|
||||
|
||||
local function active_formspec(fuel_percent, item_percent, type)
|
||||
local num_columns = (type == "Dark" and 2) or 3
|
||||
local function active_formspec(fuel_percent, item_percent, matter_type)
|
||||
local num_columns = (matter_type == "Dark" and 2) or 3
|
||||
local result = base_formspec..
|
||||
"image[2.9,1.5;1,1;default_furnace_fire_bg.png^[lowpart:"..
|
||||
(100-fuel_percent)..":default_furnace_fire_fg.png]"..
|
||||
"list[context;src;0,0.5;"..tostring(num_columns)..",3;1]"..
|
||||
"list[context;dst;7,0.5;"..tostring(num_columns)..",3;1]"..
|
||||
"label[2.9,0;"..S("@1 Matter Furnace", S(matter_type)).."]"..
|
||||
"image[4.1,1.5;1.5,1;gui_furnace_arrow_bg.png^[lowpart:"..
|
||||
(item_percent)..":gui_furnace_arrow_fg.png^[transformR270]"..
|
||||
"label[2.9,0;"..type.." Matter Furnace]"
|
||||
(item_percent)..":gui_furnace_arrow_fg.png^[transformR270]"
|
||||
if exchangeclone.mcl then
|
||||
result = result..
|
||||
mcl_formspec.get_itemslot_bg(0,0.5,num_columns,3)..
|
||||
|
@ -321,10 +324,10 @@ local function furnace_node_timer(pos, elapsed)
|
|||
|
||||
local using_collector = meta:get_int("using_collector") > 0
|
||||
|
||||
local type = "Dark"
|
||||
local matter_type = "Dark"
|
||||
local speed = 22 -- /10 to get items/second
|
||||
if minetest.get_node(pos).name:find("red_matter") then
|
||||
type = "Red"
|
||||
matter_type = "Red"
|
||||
speed = 66
|
||||
end
|
||||
|
||||
|
@ -400,7 +403,7 @@ local function furnace_node_timer(pos, elapsed)
|
|||
if src_time >= cooked.time then
|
||||
local count = cooked.item:get_count()
|
||||
if is_ore(srclist[1]:get_name()) and (count * 2 <= cooked.item:get_stack_max()) then
|
||||
if type == "Red" or (type == "Dark" and math.random(1,2) == 1) then
|
||||
if matter_type == "Red" or (matter_type == "Dark" and math.random(1,2) == 1) then
|
||||
cooked.item:set_count(count*2)
|
||||
end
|
||||
end
|
||||
|
@ -428,7 +431,7 @@ local function furnace_node_timer(pos, elapsed)
|
|||
--
|
||||
-- Update formspec and node
|
||||
--
|
||||
local formspec = inactive_formspec(type)
|
||||
local formspec = inactive_formspec(matter_type)
|
||||
local item_percent = 0
|
||||
if cookable then
|
||||
item_percent = math.floor(src_time / cooked.time * 100)
|
||||
|
@ -441,12 +444,12 @@ local function furnace_node_timer(pos, elapsed)
|
|||
if fuel_totaltime > 0 then
|
||||
fuel_percent = math.floor(fuel_time / fuel_totaltime * 100)
|
||||
end
|
||||
formspec = active_formspec(fuel_percent, item_percent, type)
|
||||
swap_node(pos, "exchangeclone:"..type:lower().."_matter_furnace_active")
|
||||
formspec = active_formspec(fuel_percent, item_percent, matter_type)
|
||||
swap_node(pos, "exchangeclone:"..matter_type:lower().."_matter_furnace_active")
|
||||
-- make sure timer restarts automatically
|
||||
result = true
|
||||
else
|
||||
swap_node(pos, "exchangeclone:"..type:lower().."_matter_furnace")
|
||||
swap_node(pos, "exchangeclone:"..matter_type:lower().."_matter_furnace")
|
||||
-- stop timer on the inactive furnace
|
||||
minetest.get_node_timer(pos):stop()
|
||||
end
|
||||
|
@ -483,7 +486,7 @@ if minetest.get_modpath("screwdriver") then
|
|||
end
|
||||
|
||||
local inactive_def = {
|
||||
description = "Dark Matter Furnace",
|
||||
description = S("Dark Matter Furnace"),
|
||||
tiles = {
|
||||
"exchangeclone_dark_matter_block.png",
|
||||
"exchangeclone_dark_matter_block.png",
|
||||
|
@ -570,7 +573,7 @@ local inactive_def = {
|
|||
}
|
||||
|
||||
local active_def = {
|
||||
description = "Active Dark Matter Furnace",
|
||||
description = S("Active Dark Matter Furnace"),
|
||||
tiles = {
|
||||
"exchangeclone_dark_matter_block.png",
|
||||
"exchangeclone_dark_matter_block.png",
|
||||
|
@ -580,7 +583,7 @@ local active_def = {
|
|||
"exchangeclone_dark_matter_furnace.png",
|
||||
},
|
||||
paramtype2 = "facedir",
|
||||
paramtype = "light",
|
||||
parammatter_type = "light",
|
||||
light_source = LIGHT_ACTIVE_FURNACE,
|
||||
drop = "exchangeclone:dark_matter_furnace",
|
||||
groups = {pickaxey=5, not_in_creative_inventory = 1, container = 4, material_stone=1, cracky = 3, level = get_level(4), exchangeclone_furnace = 1},
|
||||
|
@ -641,7 +644,7 @@ minetest.register_node("exchangeclone:dark_matter_furnace_active", table.copy(ac
|
|||
minetest.register_node("exchangeclone:red_matter_furnace_active", table.copy(active_def))
|
||||
|
||||
minetest.override_item("exchangeclone:red_matter_furnace", {
|
||||
description = "Red Matter Furnace",
|
||||
description = S("Red Matter Furnace"),
|
||||
tiles = {
|
||||
"exchangeclone_red_matter_block.png",
|
||||
"exchangeclone_red_matter_block.png",
|
||||
|
@ -713,7 +716,7 @@ minetest.override_item("exchangeclone:red_matter_furnace", {
|
|||
})
|
||||
|
||||
minetest.override_item("exchangeclone:red_matter_furnace_active", {
|
||||
description = "Active Red Matter Furnace",
|
||||
description = S("Active Red Matter Furnace"),
|
||||
tiles = {
|
||||
"exchangeclone_red_matter_block.png",
|
||||
"exchangeclone_red_matter_block.png",
|
||||
|
|
|
@ -1,26 +1,25 @@
|
|||
local S = minetest.get_translator()
|
||||
|
||||
local stone_group = "cracky"
|
||||
if exchangeclone.mcl then
|
||||
stone_group = "pickaxey"
|
||||
end
|
||||
|
||||
exchangeclone.hammer_action = {
|
||||
start_action = function(player, center, range)
|
||||
start_action = function(player, center, range, itemstack)
|
||||
if exchangeclone.check_cooldown(player, "hammer") then return end
|
||||
local data = {}
|
||||
exchangeclone.multidig[player:get_player_name()] = true -- to prevent doing 3x3 as well as AOE
|
||||
exchangeclone.play_ability_sound(player)
|
||||
data.player_energy = exchangeclone.get_player_energy(player)
|
||||
data.energy_cost = 0
|
||||
data.itemstack = itemstack
|
||||
return data
|
||||
end,
|
||||
action = function(player, pos, node, data)
|
||||
if data.energy_cost + 8 > data.player_energy then return end
|
||||
if minetest.get_item_group(node.name, stone_group) ~= 0 then
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
minetest.record_protection_violation(pos, player:get_player_name())
|
||||
else
|
||||
data.energy_cost = data.energy_cost + 8
|
||||
local drops = minetest.get_node_drops(node.name, "exchangeclone:red_matter_hammer")
|
||||
local drops = minetest.get_node_drops(node.name, data.itemstack)
|
||||
exchangeclone.drop_items_on_player(pos, drops, player)
|
||||
minetest.set_node(pos, {name = "air"})
|
||||
end
|
||||
|
@ -28,7 +27,6 @@ exchangeclone.hammer_action = {
|
|||
return data
|
||||
end,
|
||||
end_action = function(player, center, range, data)
|
||||
exchangeclone.set_player_energy(player, data.player_energy - data.energy_cost)
|
||||
exchangeclone.multidig[player:get_player_name()] = nil
|
||||
exchangeclone.start_cooldown(player, "hammer", range/2) -- The hammer has by far the most lag potential and therefore a long cooldown.
|
||||
end
|
||||
|
@ -52,10 +50,10 @@ local function hammer_on_place(itemstack, player, pointed_thing)
|
|||
local current_name = itemstack:get_name()
|
||||
if string.sub(current_name, -4, -1) == "_3x3" then
|
||||
itemstack:set_name(string.sub(current_name, 1, -5))
|
||||
minetest.chat_send_player(player:get_player_name(), "Single node mode")
|
||||
minetest.chat_send_player(player:get_player_name(), S("Single node mode"))
|
||||
else
|
||||
itemstack:set_name(current_name.."_3x3")
|
||||
minetest.chat_send_player(player:get_player_name(), "3x3 mode")
|
||||
minetest.chat_send_player(player:get_player_name(), S("3x3 mode"))
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
|
@ -65,11 +63,11 @@ local function hammer_on_place(itemstack, player, pointed_thing)
|
|||
if pointed_thing.type == "node" then
|
||||
center = pointed_thing.under
|
||||
end
|
||||
exchangeclone.node_radius_action(player, center, range, exchangeclone.hammer_action)
|
||||
exchangeclone.node_radius_action(player, center, range, exchangeclone.hammer_action, itemstack)
|
||||
end
|
||||
|
||||
minetest.register_tool("exchangeclone:dark_matter_hammer", {
|
||||
description = "Dark Matter Hammer",
|
||||
description = S("Dark Matter Hammer").."\n"..S("Single node mode"),
|
||||
wield_image = "exchangeclone_dark_matter_hammer.png",
|
||||
inventory_image = "exchangeclone_dark_matter_hammer.png",
|
||||
groups = { tool=1, hammer=1, dig_speed_class=7, enchantability=0, dark_matter_hammer = 1, disable_repair = 1, fire_immune = 1, exchangeclone_upgradable = 1},
|
||||
|
@ -94,7 +92,7 @@ minetest.register_tool("exchangeclone:dark_matter_hammer", {
|
|||
})
|
||||
|
||||
minetest.register_tool("exchangeclone:dark_matter_hammer_3x3", {
|
||||
description = "Dark Matter Hammer",
|
||||
description = S("Dark Matter Hammer").."\n"..S("3x3 mode"),
|
||||
wield_image = "exchangeclone_dark_matter_hammer.png",
|
||||
inventory_image = "exchangeclone_dark_matter_hammer.png",
|
||||
groups = { tool=1, hammer=1, dig_speed_class=7, enchantability=0, dark_matter_hammer = 1, not_in_creative_inventory = 1, disable_repair = 1, fire_immune = 1, exchangeclone_upgradable = 1},
|
||||
|
@ -118,8 +116,10 @@ minetest.register_tool("exchangeclone:dark_matter_hammer_3x3", {
|
|||
on_secondary_use = hammer_on_place,
|
||||
})
|
||||
|
||||
exchangeclone.register_energy_alias("exchangeclone:dark_matter_hammer", "exchangeclone:dark_matter_hammer_3x3")
|
||||
|
||||
minetest.register_tool("exchangeclone:red_matter_hammer", {
|
||||
description = "Red Matter Hammer",
|
||||
description = S("Red Matter Hammer").."\n"..S("Single node mode"),
|
||||
wield_image = "exchangeclone_red_matter_hammer.png",
|
||||
inventory_image = "exchangeclone_red_matter_hammer.png",
|
||||
groups = { tool=1, hammer=1, dig_speed_class=7, enchantability=0, red_matter_hammer = 1, disable_repair = 1, fire_immune = 1, exchangeclone_upgradable = 1},
|
||||
|
@ -144,7 +144,7 @@ minetest.register_tool("exchangeclone:red_matter_hammer", {
|
|||
})
|
||||
|
||||
minetest.register_tool("exchangeclone:red_matter_hammer_3x3", {
|
||||
description = "Red Matter Hammer",
|
||||
description = S("Red Matter Hammer\n3x3 mode"),
|
||||
wield_image = "exchangeclone_red_matter_hammer.png",
|
||||
inventory_image = "exchangeclone_red_matter_hammer.png",
|
||||
groups = { tool=1, hammer=1, dig_speed_class=7, enchantability=0, red_matter_hammer = 1, not_in_creative_inventory = 1, disable_repair = 1, fire_immune = 1, exchangeclone_upgradable = 1},
|
||||
|
@ -168,6 +168,8 @@ minetest.register_tool("exchangeclone:red_matter_hammer_3x3", {
|
|||
on_secondary_use = hammer_on_place,
|
||||
})
|
||||
|
||||
exchangeclone.register_energy_alias("exchangeclone:red_matter_hammer", "exchangeclone:red_matter_hammer_3x3")
|
||||
|
||||
minetest.register_craft({
|
||||
output = "exchangeclone:dark_matter_hammer",
|
||||
recipe = {
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
local S = minetest.get_translator()
|
||||
|
||||
local function create_soil(itemstack, player, pointed_thing)
|
||||
if not pointed_thing.under then return end
|
||||
if not pointed_thing.under.x then return end
|
||||
|
@ -30,7 +32,11 @@ local hoe_function
|
|||
if exchangeclone.mcl then
|
||||
hoe_function = create_soil
|
||||
else
|
||||
hoe_function = farming.hoe_on_use -- assuming farming exists
|
||||
if farming then
|
||||
hoe_function = farming.hoe_on_use
|
||||
else
|
||||
hoe_function = function(...) end
|
||||
end
|
||||
end
|
||||
|
||||
exchangeclone.hoe_action = {
|
||||
|
@ -40,27 +46,22 @@ exchangeclone.hoe_action = {
|
|||
if range > 0 then
|
||||
exchangeclone.play_ability_sound(player)
|
||||
end
|
||||
data.player_energy = exchangeclone.get_player_energy(player)
|
||||
data.energy_cost = 0
|
||||
data.itemstack = itemstack
|
||||
return data
|
||||
end,
|
||||
action = function(player, pos, node, data)
|
||||
local new_pointed_thing = {type = "node", under = pos, above = {x=pos.x,y=pos.y+1,z=pos.z}}
|
||||
data.energy_cost = data.energy_cost + 4
|
||||
hoe_function(data.itemstack, player, new_pointed_thing)
|
||||
return data
|
||||
end,
|
||||
end_action = function(player, center, range, data)
|
||||
if range > 0 then
|
||||
exchangeclone.set_player_energy(player, data.player_energy - data.energy_cost)
|
||||
exchangeclone.start_cooldown(player, "hoe", range/4)
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
local hoe_on_place = function(itemstack, player, pointed_thing)
|
||||
|
||||
local click_test = exchangeclone.check_on_rightclick(itemstack, player, pointed_thing)
|
||||
if click_test ~= false then
|
||||
return click_test
|
||||
|
@ -78,10 +79,10 @@ local hoe_on_place = function(itemstack, player, pointed_thing)
|
|||
local current_name = itemstack:get_name()
|
||||
if string.sub(current_name, -4, -1) == "_3x3" then
|
||||
itemstack:set_name(string.sub(current_name, 1, -5))
|
||||
minetest.chat_send_player(player:get_player_name(), "Single node mode")
|
||||
minetest.chat_send_player(player:get_player_name(), S("Single node mode"))
|
||||
else
|
||||
itemstack:set_name(current_name.."_3x3")
|
||||
minetest.chat_send_player(player:get_player_name(), "3x3 mode")
|
||||
minetest.chat_send_player(player:get_player_name(), S("3x3 mode"))
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
|
@ -109,7 +110,7 @@ for name, def in pairs(minetest.registered_nodes) do
|
|||
end
|
||||
|
||||
local hoe_def = {
|
||||
description = "Dark Matter Hoe",
|
||||
description = S("Dark Matter Hammer").."\n"..S("Single node mode"),
|
||||
wield_image = "exchangeclone_dark_matter_hoe.png",
|
||||
inventory_image = "exchangeclone_dark_matter_hoe.png",
|
||||
wield_scale = exchangeclone.wield_scale,
|
||||
|
@ -133,13 +134,16 @@ local hoe_def = {
|
|||
minetest.register_tool("exchangeclone:dark_matter_hoe", table.copy(hoe_def))
|
||||
|
||||
local hoe_3x3_def = table.copy(hoe_def)
|
||||
hoe_3x3_def.description = S("Dark Matter Hammer").."\n"..S("3x3 mode")
|
||||
hoe_3x3_def.groups.not_in_creative_inventory = 1
|
||||
hoe_3x3_def.tool_capabilities.groupcaps.exchangeclone_dirt.times = {[1]=0.4, [2]=0.4, [3]=0.4}
|
||||
hoe_3x3_def._mcl_diggroups.exchangeclone_dirt = { speed = 8, level = 7, uses = 0 }
|
||||
|
||||
minetest.register_tool("exchangeclone:dark_matter_hoe_3x3", table.copy(hoe_3x3_def))
|
||||
|
||||
hoe_def.description = "Red Matter Hoe"
|
||||
exchangeclone.register_energy_alias("exchangeclone:dark_matter_hoe", "exchangeclone:dark_matter_hoe_3x3")
|
||||
|
||||
hoe_def.description = S("Red Matter Hammer").."\n"..S("Single node mode")
|
||||
hoe_def.wield_image = "exchangeclone_red_matter_hoe.png"
|
||||
hoe_def.inventory_image = "exchangeclone_red_matter_hoe.png"
|
||||
hoe_def.groups = { tool=1, hoe=1, enchantability=0, red_matter_hoe = 1, disable_repair = 1, fire_immune = 1, exchangeclone_upgradable = 1}
|
||||
|
@ -158,12 +162,15 @@ hoe_def._mcl_diggroups = {
|
|||
minetest.register_tool("exchangeclone:red_matter_hoe", table.copy(hoe_def))
|
||||
|
||||
hoe_3x3_def = table.copy(hoe_def)
|
||||
hoe_3x3_def.description = S("Red Matter Hammer").."\n"..S("3x3 mode")
|
||||
hoe_3x3_def.groups.not_in_creative_inventory = 1
|
||||
hoe_3x3_def.tool_capabilities.groupcaps.exchangeclone_dirt.times = {[1]=0.25, [2]=0.25, [3]=0.25}
|
||||
hoe_3x3_def._mcl_diggroups.exchangeclone_dirt = { speed = 9, level = 8, uses = 0 }
|
||||
|
||||
minetest.register_tool("exchangeclone:red_matter_hoe_3x3", table.copy(hoe_3x3_def))
|
||||
|
||||
exchangeclone.register_energy_alias("exchangeclone:red_matter_hoe", "exchangeclone:red_matter_hoe_3x3")
|
||||
|
||||
minetest.register_craft({
|
||||
output = "exchangeclone:dark_matter_hoe",
|
||||
recipe = {
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
local S = minetest.get_translator()
|
||||
|
||||
local function infinite_food_function(itemstack, player, pointed_thing)
|
||||
local click_test = exchangeclone.check_on_rightclick(itemstack, player, pointed_thing)
|
||||
local original = ItemStack(itemstack)
|
||||
|
@ -13,7 +15,7 @@ local function infinite_food_function(itemstack, player, pointed_thing)
|
|||
end
|
||||
|
||||
minetest.register_tool("exchangeclone:infinite_food", {
|
||||
description = "Infinite Food\nConsumes 64 energy when eaten",
|
||||
description = S("Infinite Food").."\n"..S("Consumes 64 energy when eaten"),
|
||||
groups = { food = 2, eatable = 8, disable_repair = 1, fire_immune = 1},
|
||||
on_place = infinite_food_function,
|
||||
on_secondary_use = infinite_food_function,
|
||||
|
|
|
@ -7,6 +7,7 @@ if (not minetest.get_modpath("mcl_core")) and (not minetest.get_modpath("default
|
|||
else
|
||||
exchangeclone.mcl = minetest.get_modpath("mcl_core")
|
||||
end
|
||||
|
||||
exchangeclone.mineclonia = minetest.get_game_info().id == "mineclonia" -- if exchangeclone.mineclonia, exchangeclone.mcl is also defined.
|
||||
|
||||
|
||||
|
@ -17,6 +18,8 @@ local modpath = minetest.get_modpath("exchangeclone")
|
|||
exchangeclone.orb_max = minetest.settings:get("exchangeclone.orb_max") or 51200000
|
||||
exchangeclone.num_passes = minetest.settings:get("exchangeclone.num_passes") or 10
|
||||
|
||||
minetest.log("action", "Loading Exchangeclone")
|
||||
|
||||
dofile(modpath.."/lib.lua")
|
||||
dofile(modpath.."/constructor.lua")
|
||||
dofile(modpath.."/deconstructor.lua")
|
||||
|
@ -39,11 +42,13 @@ dofile(modpath.."/pickaxes.lua")
|
|||
dofile(modpath.."/hammers.lua")
|
||||
dofile(modpath.."/shovels.lua")
|
||||
dofile(modpath.."/red_matter_multitools.lua")
|
||||
dofile(modpath.."/covalence_dust.lua")
|
||||
if minetest.get_modpath("hopper") then
|
||||
dofile(modpath.."/hopper_compat.lua")
|
||||
end
|
||||
dofile(modpath.."/philosophers_stone.lua")
|
||||
dofile(modpath.."/pesa.lua")
|
||||
dofile(modpath.."/infinite_food.lua")
|
||||
dofile(modpath.."/alchemical_chests.lua")
|
||||
dofile(modpath.."/transmutation_table.lua")
|
||||
dofile(modpath.."/furnaces.lua")
|
|
@ -1,7 +1,21 @@
|
|||
-- Just a collection of a whole bunch of functions used here. There's very little order.
|
||||
-- A ton of functions with approximately zero organization. At least there are comments now.
|
||||
|
||||
-- Don't know if this even works.
|
||||
function exchangeclone.get_inventory_drops(pos, inventory, drops) --removes default dependency
|
||||
local S = minetest.get_translator()
|
||||
|
||||
-- Rounds to the nearest integer
|
||||
function exchangeclone.round(num)
|
||||
if num % 1 < 0.5 then
|
||||
return math.floor(num)
|
||||
else
|
||||
return math.ceil(num)
|
||||
end
|
||||
end
|
||||
|
||||
-- Decides what mod to use for sounds
|
||||
if exchangeclone.mcl then exchangeclone.sound_mod = mcl_sounds else exchangeclone.sound_mod = default end
|
||||
|
||||
-- Don't think this even works correctly.
|
||||
function exchangeclone.get_inventory_drops(pos, inventory, drops)
|
||||
local inv = minetest.get_meta(pos):get_inventory()
|
||||
local n = #drops
|
||||
for i = 1, inv:get_size(inventory) do
|
||||
|
@ -37,9 +51,12 @@ function exchangeclone.get_item_energy(item)
|
|||
end
|
||||
-- handle items/itemstacks
|
||||
item = ItemStack(item)
|
||||
if item == ItemStack("") then return end
|
||||
item:set_name(exchangeclone.handle_alias(item))
|
||||
local meta_energy_value = tonumber(item:get_meta():get_string("exchangeclone_energy_value"))
|
||||
if meta_energy_value and meta_energy_value > 0 then
|
||||
return meta_energy_value
|
||||
if meta_energy_value then
|
||||
if meta_energy_value < 0 then return 0 end
|
||||
if meta_energy_value > 0 then return meta_energy_value end
|
||||
end
|
||||
local def = minetest.registered_items[item:get_name()]
|
||||
if not def then return end
|
||||
|
@ -53,15 +70,6 @@ function exchangeclone.get_item_energy(item)
|
|||
end
|
||||
end
|
||||
|
||||
-- Rounds to the nearest integer
|
||||
function exchangeclone.round(num)
|
||||
if num % 1 < 0.5 then
|
||||
return math.floor(num)
|
||||
else
|
||||
return math.ceil(num)
|
||||
end
|
||||
end
|
||||
|
||||
-- https://forum.unity.com/threads/re-map-a-number-from-one-range-to-another.119437/
|
||||
-- Remaps a number from one range to another
|
||||
function exchangeclone.map(input, min1, max1, min2, max2)
|
||||
|
@ -84,14 +92,11 @@ function exchangeclone.get_orb_energy(inventory, listname, index)
|
|||
return exchangeclone.get_orb_itemstack_energy(itemstack)
|
||||
end
|
||||
|
||||
-- Decides what mod to use for sounds
|
||||
if exchangeclone.mcl then exchangeclone.sound_mod = mcl_sounds else exchangeclone.sound_mod = default end
|
||||
|
||||
function exchangeclone.set_orb_itemstack_energy(itemstack, amount)
|
||||
if not itemstack or not amount then return minetest.log(">:(") end
|
||||
if itemstack:get_name() ~= "exchangeclone:exchange_orb" then minetest.log(":O") return end
|
||||
if not itemstack or not amount then return end
|
||||
if itemstack:get_name() ~= "exchangeclone:exchange_orb" then return end
|
||||
local old_energy = exchangeclone.get_orb_itemstack_energy(itemstack)
|
||||
if amount > old_energy and old_energy > exchangeclone.orb_max then minetest.log(":(") return end -- don't allow more energy to be put into an over-filled orb
|
||||
if amount > old_energy and old_energy > exchangeclone.orb_max then return end -- don't allow more energy to be put into an over-filled orb
|
||||
|
||||
-- Square roots will hopefully make it less linear
|
||||
-- And if they don't, I don't really care and I don't want to think about math anymore.
|
||||
|
@ -115,10 +120,9 @@ function exchangeclone.set_orb_itemstack_energy(itemstack, amount)
|
|||
end
|
||||
|
||||
local colorstring = minetest.rgba(r,g,b)
|
||||
minetest.log(colorstring)
|
||||
local meta = itemstack:get_meta()
|
||||
meta:set_float("stored_energy", amount)
|
||||
meta:set_string("description", "Exchange Orb\nCurrent Charge: "..amount)
|
||||
meta:set_string("description", S("Exchange Orb").."\n"..S("Current Charge: @1", exchangeclone.format_number(amount)))
|
||||
meta:set_string("color", colorstring)
|
||||
return itemstack
|
||||
end
|
||||
|
@ -130,7 +134,7 @@ function exchangeclone.set_orb_energy(inventory, listname, index, amount)
|
|||
if not index then index = 1 end
|
||||
local itemstack = inventory:get_stack(listname, index)
|
||||
local new_stack = exchangeclone.set_orb_itemstack_energy(itemstack, amount)
|
||||
if not new_stack then minetest.log("D:") return end
|
||||
if not new_stack then return end
|
||||
inventory:set_stack(listname, index, new_stack)
|
||||
end
|
||||
|
||||
|
@ -139,7 +143,7 @@ local hud_elements = {}
|
|||
|
||||
function exchangeclone.update_hud(player)
|
||||
local hud_text = hud_elements[player:get_player_name()]
|
||||
player:hud_change(hud_text, "text", "Personal Energy: "..tostring(exchangeclone.get_player_energy(player)))
|
||||
player:hud_change(hud_text, "text", S("Personal Energy: @1", exchangeclone.format_number(exchangeclone.get_player_energy(player))))
|
||||
end
|
||||
|
||||
minetest.register_on_joinplayer(function(player, last_login)
|
||||
|
@ -147,7 +151,7 @@ minetest.register_on_joinplayer(function(player, last_login)
|
|||
hud_elem_type = "text",
|
||||
position = {x = 1, y = 1},
|
||||
offset = {x = 0, y = 0},
|
||||
text = "Personal Energy: 0",
|
||||
text = S("Personal Energy: @1", 0),
|
||||
alignment = {x = -1, y = -1},
|
||||
scale = {x = 100, y = 100},
|
||||
number = 0xDDDDDD
|
||||
|
@ -159,17 +163,6 @@ minetest.register_on_leaveplayer(function(player, timed_out)
|
|||
hud_elements[player:get_player_name()] = nil
|
||||
end)
|
||||
|
||||
-- Go from old integer energy to fancy new string energy
|
||||
minetest.register_on_joinplayer(function(player, last_login)
|
||||
local meta = player:get_meta()
|
||||
local energy = meta:get_int("exchangeclone_stored_energy") or 0
|
||||
if energy > 0 then
|
||||
-- Not sure at all whether this is necessary
|
||||
meta:set_int("exchangeclone_stored_energy", 0)
|
||||
meta:set_string("exchangeclone_stored_energy", tonumber(energy))
|
||||
end
|
||||
end)
|
||||
|
||||
-- Get a player's personal energy
|
||||
function exchangeclone.get_player_energy(player)
|
||||
return tonumber(player:get_meta():get_string("exchangeclone_stored_energy")) or 0
|
||||
|
@ -189,32 +182,27 @@ function exchangeclone.add_player_energy(player, amount)
|
|||
exchangeclone.set_player_energy(exchangeclone.get_player_energy(player) + amount)
|
||||
end
|
||||
|
||||
-- copied from http://lua-users.org/wiki/IntegerDomain
|
||||
-- Basically gets the highest number Lua supports
|
||||
-- Through trial and error, I have found that this number (1 trillion) works the best.
|
||||
-- When a player has any more energy (as in ANY more), precision-based exploits such as creating infinite glass panes are possible.
|
||||
-- I temporarily considered finding some Lua library that allowed for arbitrary precision (and therefore infinite masimum energy)
|
||||
-- but I decided not to.
|
||||
exchangeclone.limit = 1000000000000
|
||||
|
||||
-- get highest power of 2 which Lua can still handle as integer
|
||||
local step = 2
|
||||
while true do
|
||||
local nextstep = step*2
|
||||
if nextstep - (nextstep-1) == 1 and nextstep > 0 then
|
||||
step = nextstep
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
-- From https://stackoverflow.com/questions/10989788/format-integer-in-lua
|
||||
-- Formats an integer with commas, accounting for decimal points.
|
||||
function exchangeclone.format_number(number)
|
||||
-- Quit if not a number
|
||||
if not tonumber(tostring(number)) then return tostring(number) end
|
||||
|
||||
-- now get the highest number which Lua can still handle as integer
|
||||
exchangeclone.limit, step = step, math.floor(step/2)
|
||||
while step > 0 do
|
||||
local nextlimit = exchangeclone.limit + step
|
||||
if nextlimit - (nextlimit-1) == 1 and nextlimit > 0 then
|
||||
exchangeclone.limit = nextlimit
|
||||
end
|
||||
step = math.floor(step/2)
|
||||
end
|
||||
|
||||
exchangeclone.limit = exchangeclone.limit/100 -- (to account for .25)
|
||||
local _, _, minus, int, fraction = tostring(number):find('([-]?)(%d+)([.]?%d*)')
|
||||
-- reverse the int-string and append a comma to all blocks of 3 digits
|
||||
int = int:reverse():gsub("(%d%d%d)", "%1,")
|
||||
-- reverse the int-string back remove an optional comma and put the
|
||||
-- optional minus and fractional part back
|
||||
return minus .. int:reverse():gsub("^,", "") .. fraction
|
||||
end
|
||||
|
||||
-- Splits a string into a table using a delimiter (copied from somewhere, I don't remember)
|
||||
function exchangeclone.split (input, sep)
|
||||
if sep == nil then
|
||||
sep = "%s"
|
||||
|
@ -316,7 +304,7 @@ function exchangeclone.range_update(itemstack, player, max)
|
|||
range = range + 1
|
||||
end
|
||||
end
|
||||
minetest.chat_send_player(player:get_player_name(), "Current Range: "..range)
|
||||
minetest.chat_send_player(player:get_player_name(), S("Current Range: @1", range))
|
||||
itemstack:get_meta():set_int("exchangeclone_item_range", range)
|
||||
return itemstack
|
||||
end
|
||||
|
@ -327,9 +315,9 @@ if exchangeclone.mcl then
|
|||
exchangeclone.wield_scale = mcl_vars.tool_wield_scale
|
||||
end
|
||||
|
||||
exchangeclone.wield_scale = vector.multiply(exchangeclone.wield_scale, 1.4)
|
||||
exchangeclone.wield_scale = vector.multiply(exchangeclone.wield_scale, 1.3)
|
||||
|
||||
-- Itemstrings for various items
|
||||
-- Itemstrings for various items used in crafting recipes.
|
||||
exchangeclone.itemstrings = {
|
||||
cobble = exchangeclone.mcl and "mcl_core:cobble" or "default:cobble",
|
||||
redstoneworth = exchangeclone.mcl and "mesecons:redstone" or "default:obsidian",
|
||||
|
@ -341,22 +329,45 @@ exchangeclone.itemstrings = {
|
|||
diamond = exchangeclone.mcl and "mcl_core:diamond" or "default:diamond",
|
||||
}
|
||||
|
||||
exchangeclone.energy_aliases = {}
|
||||
|
||||
-- <itemstring> will be treated as <alias> in Deconstructors, Constructors, Transmutation Table(t)s, etc.
|
||||
-- When you put <itemstring> into a TT, you will learn <alias> instead.
|
||||
function exchangeclone.register_energy_alias_force(alias, itemstring)
|
||||
exchangeclone.energy_aliases[itemstring] = alias
|
||||
end
|
||||
|
||||
function exchangeclone.register_energy_alias(alias, itemstring)
|
||||
if not exchangeclone.energy_aliases[alias] then
|
||||
exchangeclone.register_energy_alias_force(alias, itemstring)
|
||||
end
|
||||
end
|
||||
|
||||
-- Returns the correct itemstring, handling aliases.
|
||||
function exchangeclone.handle_alias(item)
|
||||
item = ItemStack(item)
|
||||
if not item:is_empty() then
|
||||
local de_aliased = exchangeclone.energy_aliases[item:get_name()] or item:get_name()
|
||||
return ItemStack(de_aliased):get_name() -- Not at all sure if this is necessary to resolve MT aliases
|
||||
end
|
||||
end
|
||||
|
||||
-- Returns a player's inventory formspec with the correct width and hotbar position for the current game
|
||||
function exchangeclone.inventory_formspec(x,y)
|
||||
local formspec
|
||||
if exchangeclone.mcl then
|
||||
formspec = "list[current_player;main;"..tostring(x)..","..tostring(y)..";9,3;9]"..
|
||||
formspec = "list[current_player;main;"..x..","..y..";9,3;9]"..
|
||||
mcl_formspec.get_itemslot_bg(x,y,9,3)..
|
||||
"list[current_player;main;"..tostring(x)..","..tostring(y+3.25)..";9,1]"..
|
||||
"list[current_player;main;"..x..","..(y+3.25)..";9,1]"..
|
||||
mcl_formspec.get_itemslot_bg(x,y+3.25,9,1)
|
||||
else
|
||||
formspec = "list[current_player;main;"..tostring(x)..","..tostring(y)..";8,1]"..
|
||||
"list[current_player;main;"..tostring(x)..","..tostring(y+1.25)..";8,3;8]"
|
||||
formspec = "list[current_player;main;"..x..","..y..";8,1]"..
|
||||
"list[current_player;main;"..x..","..(y+1.25)..";8,3;8]"
|
||||
end
|
||||
return formspec
|
||||
end
|
||||
|
||||
-- Modified from MineClone2 {
|
||||
-- Modified from MineClone2, basically helps drop items on the player {
|
||||
local doTileDrops = minetest.settings:get_bool("mcl_doTileDrops", true)
|
||||
|
||||
local function get_fortune_drops(fortune_drops, fortune_level)
|
||||
|
@ -398,7 +409,8 @@ local function get_drops(drop, toolname, param2, paramtype2)
|
|||
return drops
|
||||
end
|
||||
|
||||
function exchangeclone.drop_items_on_player(pos, drops, player) --copied from MineClone's code
|
||||
-- This function gets the drops from a node and drops them at the player's position
|
||||
function exchangeclone.drop_items_on_player(pos, drops, player) -- modified from MineClone's code
|
||||
if not exchangeclone.mcl then
|
||||
return minetest.handle_node_drops(pos, drops, player)
|
||||
end
|
||||
|
@ -440,7 +452,7 @@ function exchangeclone.drop_items_on_player(pos, drops, player) --copied from Mi
|
|||
* table: Drop every itemstring in this table when dug by shears _mcl_silk_touch_drop
|
||||
]]
|
||||
|
||||
local enchantments = tool and mcl_enchanting.get_enchantments(tool)
|
||||
local enchantments = tool and mcl_enchanting.get_enchantments(tool)
|
||||
|
||||
local silk_touch_drop = false
|
||||
local nodedef = minetest.registered_nodes[dug_node.name]
|
||||
|
@ -538,6 +550,7 @@ function exchangeclone.get_face_direction(player)
|
|||
end
|
||||
|
||||
-- Execute an action for every node within a cubic radius
|
||||
-- extra_info is usually used for the tool's itemstack.
|
||||
function exchangeclone.node_radius_action(player, center, range, functions, extra_info)
|
||||
if not functions.action then return end
|
||||
local data
|
||||
|
|
|
@ -2,6 +2,5 @@ name = exchangeclone
|
|||
title = ExchangeClone
|
||||
description = The main part of the modpack (depends on both the other mods)
|
||||
min_minetest_version = 5.5
|
||||
#depends = item_tracking
|
||||
optional_depends = 3d_armor, mcl_item_id, mcl_core, default, moreswords, mcl_stairs, meat_blocks, sticky_things, fake_liquids, sound_machine, stairs, mcl_dispensers, farming, mobs_mc, screwdriver
|
||||
optional_depends = mcl_core, default, 3d_armor, mcl_item_id, moreswords, hopper, pipeworks
|
||||
author = ThePython10110
|
|
@ -1,3 +1,5 @@
|
|||
local S = minetest.get_translator()
|
||||
|
||||
local function read_orb_charge(itemstack, player, pointed_thing)
|
||||
local click_test = exchangeclone.check_on_rightclick(itemstack, player, pointed_thing)
|
||||
if click_test ~= false then
|
||||
|
@ -5,14 +7,13 @@ local function read_orb_charge(itemstack, player, pointed_thing)
|
|||
end
|
||||
|
||||
local stored = exchangeclone.get_orb_itemstack_energy(itemstack)
|
||||
minetest.chat_send_player(player:get_player_name(), "Current Charge: "..stored)
|
||||
minetest.chat_send_player(player:get_player_name(), S("Current Charge: @1", stored))
|
||||
return itemstack
|
||||
end
|
||||
|
||||
minetest.register_tool("exchangeclone:exchange_orb", {
|
||||
description = "Exchange Orb\nCurrent Charge: 0",
|
||||
description = S("Exchange Orb").."\n"..S("Current Charge: @1", 0),
|
||||
inventory_image = "exchangeclone_exchange_orb.png",
|
||||
energy_value = 33792,
|
||||
color = "#000000",
|
||||
on_secondary_use = read_orb_charge,
|
||||
on_place = read_orb_charge,
|
||||
|
@ -38,8 +39,8 @@ minetest.register_craft({
|
|||
},
|
||||
replacements = {{"exchangeclone:philosophers_stone", "exchangeclone:philosophers_stone"}}
|
||||
})
|
||||
minetest.register_craft({ --Making it fuel so hopper will work with constructor better
|
||||
minetest.register_craft({ -- Making it fuel so MineClone hoppers will work with (de)constructors
|
||||
type = "fuel",
|
||||
recipe = "exchangeclone:exchange_orb",
|
||||
burntime = 24000 --Basically 30 coal blocks... it should be worth it.
|
||||
burntime = 24000 --Basically 30 coal blocks...
|
||||
})
|
|
@ -1,6 +1,8 @@
|
|||
-- Personal Energy Storage Accessor (PESA)
|
||||
-- Deprecated now that personal energy exists.
|
||||
|
||||
-- Not bothering to add translation stuff.
|
||||
|
||||
local formspec
|
||||
if not exchangeclone.mcl then
|
||||
formspec = {
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
local S = minetest.get_translator()
|
||||
|
||||
local function show_enchanting(player)
|
||||
local player_meta = player:get_meta()
|
||||
player_meta:set_int("mcl_enchanting:num_bookshelves", 8) -- 15 for max enchantments
|
||||
player_meta:set_string("mcl_enchanting:table_name", "Enchanting Table")
|
||||
player_meta:set_string("mcl_enchanting:table_name", S("Enchanting Table").." (".. S("Philosopher's Stone")..")")
|
||||
mcl_enchanting.show_enchanting_formspec(player)
|
||||
end
|
||||
|
||||
|
@ -229,6 +231,7 @@ exchangeclone.node_transmutations = {
|
|||
|
||||
exchangeclone.stone_action = {
|
||||
start_action = function(player, center, range, mode)
|
||||
-- Yes, I named the cooldown Phil. His last name is Osophersstone.
|
||||
if exchangeclone.check_cooldown(player, "phil") then return end
|
||||
exchangeclone.play_ability_sound(player)
|
||||
return mode
|
||||
|
@ -268,8 +271,6 @@ if exchangeclone.mcl then
|
|||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
local function on_right_click(itemstack, player, pointed_thing)
|
||||
local click_test = exchangeclone.check_on_rightclick(itemstack, player, pointed_thing)
|
||||
if click_test ~= false then
|
||||
|
@ -291,42 +292,10 @@ local function on_right_click(itemstack, player, pointed_thing)
|
|||
end
|
||||
end
|
||||
|
||||
local tt_help = "(Shift)-right-click: transmute nodes. (Shift)-Aux1-right-click: Change range"
|
||||
|
||||
local item1 = "mese crystals"
|
||||
if exchangeclone.mcl then
|
||||
item1 = "emeralds"
|
||||
end
|
||||
|
||||
local longdesc = "A mysterious device discovered by alchemists millenia ago. The crafting recipe was recently rediscovered by ThePython.\n\n"..
|
||||
"It has the ability to transmute nearby nodes into other nodes. The range can be increased or decreased from 0 to 4 by (shift-)aux1-right-clicking.\n"..
|
||||
"Transmute nodes by (shift-)right-clicking (holding shift causes a few differences in transmutation). They are changed in a cube centered on "..
|
||||
"the node directly below you, with a radius equal to the range.\n"..
|
||||
"The Philosopher's Stone is also useful in converting various resources, such as turning coal into iron, or gold into "..item1..".\n"..
|
||||
"See the crafting guide for recipes. The Philosopher's Stone is NEVER used up in crafting recipes (if it is, it's a bug). The transmutation "..
|
||||
"range is reset when used in a crafting recipe."
|
||||
|
||||
local usagehelp = "The range can be increased or decreased from 0 to 4 by (shift-)aux1-right-clicking. Transmute nodes by (shift-)right-clicking (holding shift causes a few differences in transmutation). They are changed in a cube centered on "..
|
||||
"the node directly below you, with a radius equal to the range.\n\n"..
|
||||
"The Philosopher's Stone is also useful in converting various resources, such as turning coal into iron, or gold into "..item1..".\n"..
|
||||
"See the crafting guide for recipes. The Philosopher's Stone is NEVER used up in crafting recipes (if it is, it's a bug). The transmutation "..
|
||||
"range is reset when used in a crafting recipe."
|
||||
|
||||
if exchangeclone.mcl then
|
||||
tt_help = tt_help.."\nClick: crafting table. Shift-click: enchanting table."
|
||||
local extra_stuff = "\n\nIn MineClone, clicking opens a 3x3 crafting table and shift+clicking opens an enchanting table (the equivalent of a real "..
|
||||
"enchanting table with eight bookshelves around it)."
|
||||
longdesc = longdesc..extra_stuff
|
||||
usagehelp = usagehelp..extra_stuff
|
||||
end
|
||||
|
||||
minetest.register_tool("exchangeclone:philosophers_stone", {
|
||||
description = "Philosopher's Stone\nAlways returned when crafting",
|
||||
description = S("Philosopher's Stone").."\n"..S("Always returned when crafting"),
|
||||
inventory_image = "exchangeclone_philosophers_stone.png",
|
||||
wield_image = "exchangeclone_philosophers_stone.png",
|
||||
_tt_help = tt_help,
|
||||
_doc_items_longdesc = longdesc,
|
||||
_doc_items_usagehelp = usagehelp,
|
||||
exchangeclone_item_range = 0,
|
||||
on_use = on_left_click,
|
||||
on_place = on_right_click,
|
||||
|
|
|
@ -1,24 +1,23 @@
|
|||
function exchangeclone.mine_vein(player, player_energy, start_pos, node_name, pos)
|
||||
-- Not very efficient, but it SHOULD work.
|
||||
if not player then return 0 end
|
||||
if not start_pos then return 0 end
|
||||
local S = minetest.get_translator()
|
||||
|
||||
function exchangeclone.mine_vein(player, start_pos, node_name, pos, depth)
|
||||
-- Not very efficient, but it works.
|
||||
if not player then return end
|
||||
if not start_pos then return end
|
||||
if not pos then pos = start_pos end
|
||||
depth = depth or 0
|
||||
--minetest.log(dump(pos))
|
||||
local node = minetest.get_node(pos)
|
||||
if not node_name then node_name = node.name end
|
||||
local distance = vector.distance(pos, start_pos)
|
||||
if distance > 10 then return 0 end
|
||||
if player_energy < 8 then return 0 end
|
||||
if node_name == node.name then
|
||||
local energy_cost = 8
|
||||
exchangeclone.drop_items_on_player(pos, minetest.get_node_drops(node.name, "exchangeclone:red_matter_pickaxe"), player)
|
||||
minetest.set_node(pos, {name = "air"})
|
||||
for x = pos.x-1,pos.x+1 do for y = pos.y-1,pos.y+1 do for z = pos.z-1,pos.z+1 do
|
||||
local cost = exchangeclone.mine_vein(player, player_energy, start_pos, node_name, {x=x,y=y,z=z})
|
||||
if cost and cost > 0 then
|
||||
energy_cost = energy_cost + cost
|
||||
if depth <= 10 then
|
||||
exchangeclone.mine_vein(player, start_pos, node_name, {x=x,y=y,z=z}, depth+1)
|
||||
end
|
||||
end end end
|
||||
return energy_cost
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
@ -44,17 +43,17 @@ local function pickaxe_on_use(itemstack, player, pointed_thing)
|
|||
if current_mode == "1x1" then
|
||||
itemstack:set_name(current_name.."_3x1") -- set to 3x1 pick
|
||||
meta:set_string("exchangeclone_pick_mode", "tall")
|
||||
minetest.chat_send_player(player:get_player_name(), "3x1 tall mode")
|
||||
minetest.chat_send_player(player:get_player_name(), S("3x1 tall mode"))
|
||||
elseif current_mode == "tall" then
|
||||
meta:set_string("exchangeclone_pick_mode", "wide")
|
||||
minetest.chat_send_player(player:get_player_name(), "3x1 wide mode")
|
||||
minetest.chat_send_player(player:get_player_name(), S("3x1 wide mode"))
|
||||
elseif current_mode == "wide" then
|
||||
meta:set_string("exchangeclone_pick_mode", "long")
|
||||
minetest.chat_send_player(player:get_player_name(), "3x1 long mode")
|
||||
minetest.chat_send_player(player:get_player_name(), S("3x1 long mode"))
|
||||
elseif current_mode == "long" then
|
||||
itemstack:set_name(string.sub(current_name, 1, -5)) -- set to 1x1 pick
|
||||
meta:set_string("exchangeclone_pick_mode", "1x1")
|
||||
minetest.chat_send_player(player:get_player_name(), "Single node mode")
|
||||
minetest.chat_send_player(player:get_player_name(), S("Single node mode"))
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
|
@ -62,14 +61,10 @@ local function pickaxe_on_use(itemstack, player, pointed_thing)
|
|||
if pointed_thing.type == "node" then
|
||||
if exchangeclone.check_cooldown(player, "pickaxe") then return itemstack end
|
||||
if (minetest.get_item_group(minetest.get_node(pointed_thing.under).name, "exchangeclone_ore") > 0) then
|
||||
local player_energy = exchangeclone.get_player_energy(player)
|
||||
exchangeclone.play_ability_sound(player)
|
||||
exchangeclone.multidig[player:get_player_name()] = true
|
||||
local energy_cost = exchangeclone.mine_vein(player, player_energy, pointed_thing.under)
|
||||
exchangeclone.mine_vein(player, pointed_thing.under)
|
||||
exchangeclone.multidig[player:get_player_name()] = nil
|
||||
if energy_cost then
|
||||
exchangeclone.set_player_energy(player, player_energy - energy_cost)
|
||||
end
|
||||
elseif itemstack:get_name():find("red") then
|
||||
local player_energy = exchangeclone.get_player_energy(player)
|
||||
torch_on_place(ItemStack(torch_itemstring), player, pointed_thing)
|
||||
|
@ -88,6 +83,7 @@ for name, def in pairs(minetest.registered_nodes) do
|
|||
or name:find("andesite_with")
|
||||
or name:find("granite_with")
|
||||
or name:find("tuff_with")
|
||||
or name:find("mineral_")
|
||||
or (name == "mcl_blackstone:nether_gold")
|
||||
or (name == "mcl_nether:ancient_debris") then
|
||||
local groups = table.copy(def.groups)
|
||||
|
@ -97,7 +93,7 @@ for name, def in pairs(minetest.registered_nodes) do
|
|||
end
|
||||
|
||||
local pick_def = {
|
||||
description = "Dark Matter Pickaxe",
|
||||
description = S("Dark Matter Pickaxe").."\n"..S("Single node mode"),
|
||||
wield_image = "exchangeclone_dark_matter_pickaxe.png",
|
||||
inventory_image = "exchangeclone_dark_matter_pickaxe.png",
|
||||
exchangeclone_pick_mode = "1x1",
|
||||
|
@ -125,6 +121,7 @@ local pick_def = {
|
|||
minetest.register_tool("exchangeclone:dark_matter_pickaxe", table.copy(pick_def))
|
||||
|
||||
local pick_def_3x1 = table.copy(pick_def)
|
||||
pick_def_3x1.description = S("Dark Matter Pickaxe").."\n"..S("3x1 mode")
|
||||
pick_def_3x1.exchangeclone_pick_mode = "tall"
|
||||
pick_def_3x1.groups.not_in_creative_inventory = 1
|
||||
pick_def_3x1.tool_capabilities.groupcaps.cracky.times = {[1]=0.45, [2]=0.27, [3]=0.11}
|
||||
|
@ -132,7 +129,9 @@ pick_def_3x1._mcl_diggroups.pickaxey.speed = 35
|
|||
|
||||
minetest.register_tool("exchangeclone:dark_matter_pickaxe_3x1", table.copy(pick_def_3x1))
|
||||
|
||||
pick_def.description = "Red Matter Pickaxe"
|
||||
exchangeclone.register_energy_alias("exchangeclone:dark_matter_pickaxe", "exchangeclone:dark_matter_pickaxe_3x1")
|
||||
|
||||
pick_def.description = S("Red Matter Pickaxe").."\n"..S("Single node mode")
|
||||
pick_def.wield_image = "exchangeclone_red_matter_pickaxe.png"
|
||||
pick_def.inventory_image = "exchangeclone_red_matter_pickaxe.png"
|
||||
pick_def.groups.dark_matter_pickaxe = nil
|
||||
|
@ -151,7 +150,8 @@ pick_def._mcl_diggroups.pickaxey = { speed = 60, level = 8, uses = 0 }
|
|||
|
||||
minetest.register_tool("exchangeclone:red_matter_pickaxe", table.copy(pick_def))
|
||||
|
||||
local pick_def_3x1 = table.copy(pick_def)
|
||||
pick_def_3x1.description = S("Red Matter Pickaxe").."\n"..S("3x1 mode")
|
||||
pick_def_3x1 = table.copy(pick_def)
|
||||
pick_def_3x1.exchangeclone_pick_mode = "tall"
|
||||
pick_def_3x1.groups.not_in_creative_inventory = 1
|
||||
pick_def_3x1.tool_capabilities.groupcaps.cracky.times = {[1]=0.32, [2]=0.16, [3]=0.08}
|
||||
|
@ -159,6 +159,8 @@ pick_def_3x1._mcl_diggroups.pickaxey.speed = 52
|
|||
|
||||
minetest.register_tool("exchangeclone:red_matter_pickaxe_3x1", table.copy(pick_def_3x1))
|
||||
|
||||
exchangeclone.register_energy_alias("exchangeclone:red_matter_pickaxe", "exchangeclone:red_matter_pickaxe_3x1")
|
||||
|
||||
minetest.register_craft({
|
||||
output = "exchangeclone:dark_matter_pickaxe",
|
||||
recipe = {
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
local S = minetest.get_translator()
|
||||
|
||||
--------------------------------------RED KATAR--------------------------------------
|
||||
|
||||
local katar_on_use = function(itemstack, player, pointed_thing)
|
||||
|
@ -38,9 +40,9 @@ local katar_on_use = function(itemstack, player, pointed_thing)
|
|||
exchangeclone.node_radius_action(player, center, range, exchangeclone.hoe_action, itemstack)
|
||||
end
|
||||
elseif minetest.get_item_group(node.name, "tree") > 0 then
|
||||
exchangeclone.node_radius_action(player, center, range, exchangeclone.axe_action)
|
||||
exchangeclone.node_radius_action(player, center, range, exchangeclone.axe_action, itemstack)
|
||||
elseif minetest.get_item_group(node.name, "shearsy") > 0 or minetest.get_item_group(node.name, "shearsy_cobweb") > 0 then
|
||||
exchangeclone.node_radius_action(player, center, range, exchangeclone.shear_action)
|
||||
exchangeclone.node_radius_action(player, center, range, exchangeclone.shear_action, itemstack)
|
||||
end
|
||||
else
|
||||
local damage_all = itemstack:get_meta():get_int("exchangeclone_damage_all")
|
||||
|
@ -63,7 +65,7 @@ local katar_on_use = function(itemstack, player, pointed_thing)
|
|||
end
|
||||
|
||||
local katar_def = {
|
||||
description = "Red Katar",
|
||||
description = S("Red Katar").."\n"..S("Single node mode"),
|
||||
wield_image = "exchangeclone_red_katar.png",
|
||||
inventory_image = "exchangeclone_red_katar.png",
|
||||
on_secondary_use = katar_on_use,
|
||||
|
@ -95,11 +97,16 @@ local katar_def = {
|
|||
}
|
||||
|
||||
minetest.register_tool("exchangeclone:red_katar", table.copy(katar_def))
|
||||
|
||||
katar_def.description = S("Red Katar").."\n"..S("3x3 mode")
|
||||
katar_def.groups.not_in_creative_inventory = 1
|
||||
katar_def._mcl_diggroups.exchangeclone_dirt = {speed = 8, level = 8, uses = 0}
|
||||
katar_def.tool_capabilities.groupcaps.exchangeclone_dirt = {times={[1]=0.25,[2]=0.25,[3]=0.25}}
|
||||
|
||||
minetest.register_tool("exchangeclone:red_katar_3x3", table.copy(katar_def))
|
||||
|
||||
exchangeclone.register_energy_alias("exchangeclone:red_katar", "exchangeclone:red_katar_3x3")
|
||||
|
||||
minetest.register_craft({
|
||||
output = "exchangeclone:red_katar",
|
||||
type = "shapeless",
|
||||
|
@ -118,24 +125,21 @@ minetest.register_craft({
|
|||
|
||||
--------------------------------------RED MORNINGSTAR--------------------------------------
|
||||
exchangeclone.morningstar_action = {
|
||||
start_action = function(player, center, range)
|
||||
start_action = function(player, center, range, itemstack)
|
||||
if exchangeclone.check_cooldown(player, "shovel") then return end
|
||||
if exchangeclone.check_cooldown(player, "hammer") then return end
|
||||
local data = {}
|
||||
data.player_energy = exchangeclone.get_player_energy(player)
|
||||
data.energy_cost = 0
|
||||
data.itemstack = itemstack
|
||||
exchangeclone.play_ability_sound(player)
|
||||
return data
|
||||
end,
|
||||
action = function(player, pos, node, data)
|
||||
if data.energy_cost + 8 > data.player_energy then return end
|
||||
if ((minetest.get_item_group(node.name, "crumbly") > 0) or (minetest.get_item_group(node.name, "shovely") > 0))
|
||||
or ((minetest.get_item_group(node.name, "cracky") > 0) or (minetest.get_item_group(node.name, "pickaxey") > 0)) then
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
minetest.record_protection_violation(pos, player:get_player_name())
|
||||
else
|
||||
data.energy_cost = data.energy_cost + 8
|
||||
local drops = minetest.get_node_drops(node.name, "exchangeclone:red_morningstar")
|
||||
local drops = minetest.get_node_drops(node.name, data.itemstack)
|
||||
exchangeclone.drop_items_on_player(pos, drops, player)
|
||||
minetest.set_node(pos, {name = "air"})
|
||||
end
|
||||
|
@ -143,7 +147,6 @@ exchangeclone.morningstar_action = {
|
|||
return data
|
||||
end,
|
||||
end_action = function(player, center, range, data)
|
||||
exchangeclone.set_player_energy(player, data.player_energy - data.energy_cost)
|
||||
exchangeclone.start_cooldown(player, "shovel", range/4) -- Longish cooldown
|
||||
exchangeclone.start_cooldown(player, "hammer", range/2)
|
||||
end
|
||||
|
@ -172,18 +175,14 @@ local function morningstar_on_use(itemstack, player, pointed_thing)
|
|||
if pointed_thing.type == "node" then
|
||||
center = pointed_thing.under
|
||||
if player:get_player_control().sneak then
|
||||
exchangeclone.node_radius_action(player, center, range, exchangeclone.morningstar_action)
|
||||
exchangeclone.node_radius_action(player, center, range, exchangeclone.morningstar_action, itemstack)
|
||||
return
|
||||
elseif (minetest.get_item_group(minetest.get_node(pointed_thing.under).name, "exchangeclone_ore") > 0) then
|
||||
if exchangeclone.check_cooldown(player, "pickaxe") then return itemstack end
|
||||
local player_energy = exchangeclone.get_player_energy(player)
|
||||
exchangeclone.play_ability_sound(player)
|
||||
exchangeclone.multidig[player:get_player_name()] = true
|
||||
local energy_cost = exchangeclone.mine_vein(player, player_energy, pointed_thing.under)
|
||||
exchangeclone.mine_vein(player, pointed_thing.under)
|
||||
exchangeclone.multidig[player:get_player_name()] = nil
|
||||
if energy_cost then
|
||||
exchangeclone.set_player_energy(player, player_energy - energy_cost)
|
||||
end
|
||||
exchangeclone.start_cooldown(player, "pickaxe", 0.3)
|
||||
return
|
||||
else
|
||||
|
@ -202,30 +201,30 @@ local function morningstar_on_use(itemstack, player, pointed_thing)
|
|||
if current_mode == "1x1" then
|
||||
itemstack:set_name(current_name.."_3x3") -- set to 3x3 pick
|
||||
meta:set_string("exchangeclone_pick_mode", "3x3")
|
||||
minetest.chat_send_player(player:get_player_name(), "3x3 mode")
|
||||
minetest.chat_send_player(player:get_player_name(), S("3x3 mode"))
|
||||
elseif current_mode == "3x3" then
|
||||
itemstack:set_name(string.sub(current_name, 1, -5).."_3x1") -- set to 3x1 pick
|
||||
meta:set_string("exchangeclone_pick_mode", "tall")
|
||||
minetest.chat_send_player(player:get_player_name(), "3x1 tall mode")
|
||||
minetest.chat_send_player(player:get_player_name(), S("3x1 tall mode"))
|
||||
elseif current_mode == "tall" then
|
||||
meta:set_string("exchangeclone_pick_mode", "wide")
|
||||
minetest.chat_send_player(player:get_player_name(), "3x1 wide mode")
|
||||
minetest.chat_send_player(player:get_player_name(), S("3x1 wide mode"))
|
||||
elseif current_mode == "wide" then
|
||||
meta:set_string("exchangeclone_pick_mode", "long")
|
||||
minetest.chat_send_player(player:get_player_name(), "3x1 long mode")
|
||||
minetest.chat_send_player(player:get_player_name(), S("3x1 long mode"))
|
||||
elseif current_mode == "long" then
|
||||
itemstack:set_name(string.sub(current_name, 1, -5)) -- set to 1x1 pick
|
||||
meta:set_string("exchangeclone_pick_mode", "1x1")
|
||||
minetest.chat_send_player(player:get_player_name(), "Single node mode")
|
||||
minetest.chat_send_player(player:get_player_name(), S("Single node mode"))
|
||||
end
|
||||
return itemstack
|
||||
else
|
||||
exchangeclone.node_radius_action(player, center, range, exchangeclone.morningstar_action)
|
||||
exchangeclone.node_radius_action(player, center, range, exchangeclone.morningstar_action, itemstack)
|
||||
end
|
||||
end
|
||||
|
||||
local morningstar_def = {
|
||||
description = "Red Morningstar",
|
||||
description = S("Red Morningstar").."\n"..S("Single node mode"),
|
||||
wield_image = "exchangeclone_red_morningstar.png",
|
||||
inventory_image = "exchangeclone_red_morningstar.png",
|
||||
on_secondary_use = morningstar_on_use,
|
||||
|
@ -259,19 +258,26 @@ for k, v in pairs({cracky = "pickaxey", crumbly = "shovely"}) do
|
|||
morningstar_def.tool_capabilities.groupcaps[k].times = {[1]=0.7,[2]=0.5,[3]=0.25}
|
||||
morningstar_def._mcl_diggroups[v].speed = 70
|
||||
end
|
||||
morningstar_def.description = S("Red Morningstar").."\n"..S("3x3 mode")
|
||||
morningstar_def.groups.not_in_creative_inventory = 1
|
||||
morningstar_def.exchangeclone_pick_mode = "3x3"
|
||||
|
||||
minetest.register_tool("exchangeclone:red_morningstar_3x3", table.copy(morningstar_def))
|
||||
|
||||
exchangeclone.register_energy_alias("exchangeclone:red_morningstar", "exchangeclone:red_morningstar_3x3")
|
||||
|
||||
for k, v in pairs({cracky = "pickaxey", crumbly = "shovely"}) do
|
||||
morningstar_def.tool_capabilities.groupcaps[k].times = {[1]=0.6,[2]=0.4,[3]=0.20}
|
||||
morningstar_def._mcl_diggroups[v].speed = 60
|
||||
morningstar_def._mcl_diggroups[v].speed = 80
|
||||
end
|
||||
morningstar_def.exchangeclone_pick_mode = "tall"
|
||||
|
||||
morningstar_def.description = S("Red Morningstar").."\n"..S("3x1 mode")
|
||||
|
||||
minetest.register_tool("exchangeclone:red_morningstar_3x1", table.copy(morningstar_def))
|
||||
|
||||
exchangeclone.register_energy_alias("exchangeclone:red_morningstar", "exchangeclone:red_morningstar_3x1")
|
||||
|
||||
minetest.register_craft({
|
||||
output = "exchangeclone:red_morningstar",
|
||||
type = "shapeless",
|
||||
|
|
|
@ -1,23 +1,20 @@
|
|||
exchangeclone.shear_action = {
|
||||
start_action = function(player, center, range)
|
||||
start_action = function(player, center, range, itemstack)
|
||||
if exchangeclone.check_cooldown(player, "shears") then return end
|
||||
local data = {}
|
||||
data.player_energy = exchangeclone.get_player_energy(player)
|
||||
if data.player_energy < 8 then return end
|
||||
exchangeclone.play_ability_sound(player)
|
||||
data.energy_cost = 0
|
||||
data.itemstack = itemstack
|
||||
return data
|
||||
end,
|
||||
action = function(player, pos, node, data)
|
||||
if data.energy_cost + 8 > data.player_energy then return end
|
||||
local node_def = minetest.registered_items[node.name]
|
||||
if (node_def.groups.shearsy or node_def.groups.shearsy_cobweb) and node.name ~= "mcl_flowers:double_grass_top" then
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
minetest.record_protection_violation(pos, player:get_player_name())
|
||||
else
|
||||
data.energy_cost = data.energy_cost + 8
|
||||
local drops = minetest.get_node_drops(node.name, "exchangeclone:red_matter_shears")
|
||||
local drops = minetest.get_node_drops(node.name, data.itemstack)
|
||||
exchangeclone.drop_items_on_player(pos, drops, player)
|
||||
-- Annoying manual override
|
||||
if node.name:sub(1,18) == "mcl_ocean:seagrass" then
|
||||
minetest.set_node(pos, {name="sand"})
|
||||
else
|
||||
|
@ -28,7 +25,6 @@ exchangeclone.shear_action = {
|
|||
return data
|
||||
end,
|
||||
end_action = function(player, center, range, data)
|
||||
exchangeclone.set_player_energy(player, data.player_energy - data.energy_cost)
|
||||
exchangeclone.start_cooldown(player, "shears", (range+1)/7)
|
||||
return data
|
||||
end
|
||||
|
@ -66,7 +62,7 @@ local shears_rightclick = function(itemstack, player, pointed_thing)
|
|||
center = pointed_thing.under
|
||||
end
|
||||
local range = tonumber(itemstack:get_meta():get_int("exchangeclone_item_range"))
|
||||
exchangeclone.node_radius_action(player, center, range, exchangeclone.shear_action)
|
||||
exchangeclone.node_radius_action(player, center, range, exchangeclone.shear_action, itemstack)
|
||||
return itemstack
|
||||
end
|
||||
|
||||
|
|
|
@ -1,19 +1,17 @@
|
|||
exchangeclone.shovel_action = {
|
||||
start_action = function(player, center, range)
|
||||
start_action = function(player, center, range, itemstack)
|
||||
if exchangeclone.check_cooldown(player, "shovel") then return end
|
||||
local data = {}
|
||||
data.player_energy = exchangeclone.get_player_energy(player)
|
||||
data.energy_cost = 0
|
||||
if exchangeclone.mcl then
|
||||
data.path = not player:get_player_control().sneak
|
||||
end
|
||||
if range > 0 or not data.path then
|
||||
exchangeclone.play_ability_sound(player)
|
||||
end
|
||||
data.itemstack = itemstack
|
||||
return data
|
||||
end,
|
||||
action = function(player, pos, node, data)
|
||||
if data.energy_cost + 8 > data.player_energy then return end
|
||||
if ((minetest.get_item_group(node.name, "crumbly") > 0) or (minetest.get_item_group(node.name, "shovely") > 0)) then
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
minetest.record_protection_violation(pos, player:get_player_name())
|
||||
|
@ -24,13 +22,11 @@ exchangeclone.shovel_action = {
|
|||
minetest.get_item_group(node.name, "path_creation_possible") == 1 then
|
||||
if minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}).name == "air" then
|
||||
minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = pos}, true)
|
||||
data.energy_cost = data.energy_cost + 4
|
||||
minetest.swap_node(pos, {name="mcl_core:grass_path"})
|
||||
end
|
||||
end
|
||||
else
|
||||
data.energy_cost = data.energy_cost + 8
|
||||
local drops = minetest.get_node_drops(node.name, "exchangeclone:red_matter_shovel")
|
||||
local drops = minetest.get_node_drops(node.name, data.itemstack)
|
||||
exchangeclone.drop_items_on_player(pos, drops, player)
|
||||
minetest.set_node(pos, {name = "air"})
|
||||
end
|
||||
|
@ -40,7 +36,6 @@ exchangeclone.shovel_action = {
|
|||
end,
|
||||
end_action = function(player, center, range, data)
|
||||
if range > 0 or not data.path then
|
||||
exchangeclone.set_player_energy(player, data.player_energy - data.energy_cost)
|
||||
exchangeclone.start_cooldown(player, "shovel", range/4) -- Longish cooldown
|
||||
end
|
||||
end
|
||||
|
@ -68,7 +63,7 @@ local function shovel_on_place(itemstack, player, pointed_thing)
|
|||
center = pointed_thing.under
|
||||
end
|
||||
|
||||
exchangeclone.node_radius_action(player, center, range, exchangeclone.shovel_action)
|
||||
exchangeclone.node_radius_action(player, center, range, exchangeclone.shovel_action, itemstack)
|
||||
|
||||
return itemstack
|
||||
end
|
||||
|
|
|
@ -74,13 +74,6 @@ function exchangeclone.aoe_attack(info)
|
|||
|
||||
if exchangeclone.check_cooldown(player, "sword") then return end
|
||||
|
||||
local player_energy = exchangeclone.get_player_energy(player)
|
||||
if player_energy >= 384 then
|
||||
exchangeclone.set_player_energy(player, player_energy - 384)
|
||||
else
|
||||
return
|
||||
end
|
||||
|
||||
exchangeclone.play_ability_sound(player)
|
||||
|
||||
local pos = player:get_pos()
|
||||
|
@ -94,9 +87,9 @@ function exchangeclone.aoe_attack(info)
|
|||
|
||||
-- Ignore items to lower lag
|
||||
if (obj:is_player()
|
||||
or (ent and not aoe_exclude[ent.name]
|
||||
and not (damage_all == 0 and not hostile_mobs[ent.name]))) --ignore hostile mobs if necessary
|
||||
and obj:get_hp() > 0 and obj ~= player then
|
||||
or (ent and not aoe_exclude[ent.name]
|
||||
and not (damage_all == 0 and not hostile_mobs[ent.name]))) --ignore hostile mobs if necessary
|
||||
and obj:get_hp() > 0 and obj ~= player then
|
||||
|
||||
local opos = obj:get_pos()
|
||||
local distance = math.max(1, vector.distance(pos, opos))
|
||||
|
@ -126,7 +119,7 @@ function exchangeclone.aoe_attack(info)
|
|||
return
|
||||
end
|
||||
if exchangeclone.mcl then
|
||||
mcl_util.deal_damage(obj, damage, { type = "generic", direct = player})
|
||||
mcl_util.deal_damage(obj, damage, { type = "hit", direct = player})
|
||||
else
|
||||
obj:set_hp(obj:get_hp() - damage)
|
||||
end
|
||||
|
@ -134,7 +127,7 @@ function exchangeclone.aoe_attack(info)
|
|||
end)
|
||||
else
|
||||
if exchangeclone.mcl then
|
||||
mcl_util.deal_damage(obj, damage, { type = "generic", direct = player})
|
||||
mcl_util.deal_damage(obj, damage, { type = "hit", direct = player})
|
||||
else
|
||||
obj:set_hp(obj:get_hp() - damage)
|
||||
end
|
||||
|
|
|
@ -43,7 +43,7 @@ function exchangeclone.reload_transmutation_list(player, search)
|
|||
if not search or search == "" then search = player:get_meta():get_string("exchangeclone_transmutation_search") or "" end
|
||||
if search and search ~= "" then
|
||||
local filtered_items = {}
|
||||
for _,name in ipairs(items_to_show) do
|
||||
for _, name in pairs(items_to_show) do
|
||||
local def = minetest.registered_items[name]
|
||||
if def and def.description and def.description ~= "" then
|
||||
if filter_item(string.lower(def.name), def.description, lang, search) then
|
||||
|
@ -53,15 +53,28 @@ function exchangeclone.reload_transmutation_list(player, search)
|
|||
items_to_show = table.copy(filtered_items)
|
||||
end
|
||||
end
|
||||
for _, item in ipairs(items_to_show) do
|
||||
local energy_value = exchangeclone.get_item_energy(item)
|
||||
if energy_value and energy_value <= player_energy and energy_value > 0 then
|
||||
page_num = math.floor(i/16) + 1
|
||||
if not pages[page_num] then pages[page_num] = {} end
|
||||
pages[page_num][(i % 16) + 1] = item
|
||||
i = i + 1
|
||||
local no_duplicates = {}
|
||||
for _, item in pairs(items_to_show) do
|
||||
if type(item) == "string" then
|
||||
local energy_value = exchangeclone.get_item_energy(item)
|
||||
if energy_value and energy_value <= player_energy and energy_value > 0 then
|
||||
no_duplicates[exchangeclone.handle_alias(item)] = true -- gets rid of duplicates
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
items_to_show = {}
|
||||
for item, _ in pairs(no_duplicates) do
|
||||
table.insert(items_to_show, item)
|
||||
end
|
||||
table.sort(items_to_show)
|
||||
|
||||
for _, item in ipairs(items_to_show) do
|
||||
page_num = math.floor(i/16) + 1
|
||||
if not pages[page_num] then pages[page_num] = {} end
|
||||
pages[page_num][(i % 16) + 1] = item
|
||||
i = i + 1
|
||||
end
|
||||
player:get_meta():set_string("exchangeclone_transmutation", minetest.serialize(pages))
|
||||
return pages
|
||||
end
|
||||
|
@ -84,9 +97,11 @@ end
|
|||
|
||||
local function handle_inventory(player, inventory, to_list)
|
||||
local stack = inventory:get_stack(to_list, 1)
|
||||
local itemstring = stack:get_name()
|
||||
itemstring = exchangeclone.energy_aliases[itemstring] or itemstring
|
||||
if to_list == "learn" then
|
||||
local list = minetest.deserialize(player:get_meta():get_string("exchangeclone_transmutation_learned_items")) or {}
|
||||
if stack:get_name() == "exchangeclone:alchemical_tome" then
|
||||
if itemstring == "exchangeclone:alchemical_tome" then
|
||||
list = {}
|
||||
local i = 0
|
||||
for name, def in pairs(minetest.registered_items) do
|
||||
|
@ -100,13 +115,13 @@ local function handle_inventory(player, inventory, to_list)
|
|||
player:get_meta():set_string("exchangeclone_transmutation_learned_items", minetest.serialize(list))
|
||||
inventory:set_stack(to_list, 1, nil)
|
||||
else
|
||||
local individual_energy_value = exchangeclone.get_item_energy(stack:get_name())
|
||||
local individual_energy_value = exchangeclone.get_item_energy(itemstring)
|
||||
if not individual_energy_value or individual_energy_value <= 0 then return end
|
||||
local wear = stack:get_wear()
|
||||
if wear and wear > 1 then
|
||||
individual_energy_value = math.floor(individual_energy_value * (65536 / wear))
|
||||
end
|
||||
if stack:get_name() == "exchangeclone:exchange_orb" then
|
||||
if itemstring == "exchangeclone:exchange_orb" then
|
||||
individual_energy_value = individual_energy_value + exchangeclone.get_orb_itemstack_energy(stack)
|
||||
end
|
||||
local player_energy = exchangeclone.get_player_energy(player)
|
||||
|
@ -116,9 +131,9 @@ local function handle_inventory(player, inventory, to_list)
|
|||
local result = player_energy + energy_value
|
||||
if result < 0 or result > exchangeclone.limit then return end
|
||||
exchangeclone.set_player_energy(player, result)
|
||||
local item_index = table.indexof(list, stack:get_name())
|
||||
local item_index = table.indexof(list, itemstring)
|
||||
if item_index == -1 then
|
||||
list[#list+1] = stack:get_name()
|
||||
list[#list+1] = itemstring
|
||||
table.sort(list)
|
||||
player:get_meta():set_string("exchangeclone_transmutation_learned_items", minetest.serialize(list))
|
||||
end
|
||||
|
@ -161,10 +176,8 @@ local function allow_inventory_action(player, stack, to_list, count, move, inven
|
|||
return 0
|
||||
elseif to_list == "learn" then
|
||||
if stack:get_name() == "exchangeclone:alchemical_tome" then return count end
|
||||
local name = stack:get_name()
|
||||
local energy_value = exchangeclone.get_item_energy(stack:get_name())
|
||||
local energy_value = exchangeclone.get_item_energy(exchangeclone.handle_alias(stack))
|
||||
if not energy_value then return 0 end
|
||||
local def = minetest.registered_items[name]
|
||||
if energy_value <= 0 then
|
||||
return 0
|
||||
else
|
||||
|
@ -198,7 +211,7 @@ function exchangeclone.show_transmutation_table_formspec(player, data)
|
|||
local selection = data.selection or player:get_meta():get_string("exchangeclone_transmutation_selection")
|
||||
local player_name = player:get_player_name()
|
||||
local inventory_name = "detached:exchangeclone_transmutation_"..player_name
|
||||
local label = "Transmutation\n"..tostring(player_energy).." energy"
|
||||
local label = "Transmutation\n"..exchangeclone.format_number(player_energy).." energy"
|
||||
|
||||
local formspec =
|
||||
"size[9,11]"..
|
||||
|
|
|
@ -21,7 +21,6 @@ end
|
|||
if minetest.get_modpath("technic") then
|
||||
local function register_technic_recipe(recipe)
|
||||
local result = {recipe = recipe.input, output = recipe.output, type = "technic"}
|
||||
--minetest.log(dump(result))
|
||||
local output_itemstring = ItemStack(recipe.output):get_name()
|
||||
exchangeclone.recipes[output_itemstring] = exchangeclone.recipes[output_itemstring] or {}
|
||||
table.insert(exchangeclone.recipes[output_itemstring], result)
|
||||
|
|
Loading…
Reference in New Issue