Fix a couple of things, add comments

This commit is contained in:
ThePython 2023-11-02 17:24:26 -07:00
parent 281b2a90df
commit 3fa283b956
1 changed files with 46 additions and 23 deletions

View File

@ -24,13 +24,14 @@ function exchangeclone.get_item_energy(item)
end
item = ItemStack(item)
local def = minetest.registered_items[item:get_name()]
if not def then return end
if not def then return -1 end
if item:get_name() == "exchangeclone:exchange_orb" then
return def.energy_value or 0 + exchangeclone.get_orb_itemstack_energy(item)
return (def.energy_value or 0) + exchangeclone.get_orb_itemstack_energy(item)
end
if def.energy_value then
return (def.energy_value) * item:get_count()
end
return -1
end
-- Rounds to the nearest integer
@ -50,14 +51,14 @@ end
-- Gets the energy stored in a specified exchange_orb itemstack.
function exchangeclone.get_orb_itemstack_energy(itemstack)
if not itemstack then return end
if itemstack:get_name() ~= "exchangeclone:exchange_orb" then return end
if not itemstack then return 0 end
if itemstack:get_name() ~= "exchangeclone:exchange_orb" then return 0 end
return itemstack:get_meta():get_float("stored_energy") or 0
end
-- Gets the amount of energy stored in an orb in a specific inventory slot
function exchangeclone.get_orb_energy(inventory, listname, index)
if not inventory then return -1 end
if not inventory then return 0 end
if not listname then listname = "main" end
if not index then index = 1 end
local itemstack = inventory:get_stack(listname, index)
@ -108,7 +109,7 @@ function exchangeclone.set_orb_energy(inventory, listname, index, amount)
inventory:set_stack(listname, index, itemstack)
end
-- Hud stuff (show energy value in bottom right)
-- HUD stuff (show energy value in bottom right)
local hud_elements = {}
function exchangeclone.update_hud(player)
@ -133,9 +134,10 @@ 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")
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)
@ -143,16 +145,20 @@ minetest.register_on_joinplayer(function(player, last_login)
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
end
-- Set a player's personal energy
function exchangeclone.set_player_energy(player, amount)
player:get_meta():set_string("exchangeclone_stored_energy", string.format("%.16e", amount))
exchangeclone.update_hud(player)
end
-- copied from http://lua-users.org/wiki/IntegerDomain
-- Basically gets the highest number Lua supports
-- get highest power of 2 which Lua can still handle as integer
local step = 2
while true do
@ -174,9 +180,14 @@ while step > 0 do
step = math.floor(step/2)
end
-- Returns a table of all items in the specified group(s).
function exchangeclone.get_group_items(groups, allow_duplicates, include_no_group)
if type(groups) ~= "table" then
return nil
if type(groups) == "string" then
groups = {groups}
else
return
end
end
allow_duplicates = allow_duplicates or false
@ -213,6 +224,7 @@ function exchangeclone.get_group_items(groups, allow_duplicates, include_no_grou
return result
end
-- Plays the sound caused by ExchangeClone abilities
function exchangeclone.play_ability_sound(player, base_pitch)
if not player then return end
if not base_pitch then base_pitch = 1 end
@ -220,6 +232,7 @@ function exchangeclone.play_ability_sound(player, base_pitch)
minetest.sound_play("exchangeclone_ability", {pitch = new_pitch, pos = player:get_pos(), max_hear_distance = 20, })
end
-- Check the clicked node for a right-click function.
function exchangeclone.check_on_rightclick(itemstack, player, pointed_thing)
if pointed_thing.type ~= "node" then return false end
if player:get_player_control().sneak then return false end
@ -232,6 +245,7 @@ function exchangeclone.check_on_rightclick(itemstack, player, pointed_thing)
return false
end
-- Update the range of an ExchangeClone tool
function exchangeclone.range_update(itemstack, player, max)
if not max then max = 4 end
local range = tonumber(itemstack:get_meta():get_int("exchangeclone_item_range"))
@ -253,31 +267,21 @@ function exchangeclone.range_update(itemstack, player, max)
return itemstack
end
-- Make ExchangeClone tools slightly larger...
exchangeclone.wield_scale = {x=1,y=1,z=1}
if exchangeclone.mcl then
exchangeclone.wield_scale = mcl_vars.tool_wield_scale
end
exchangeclone.wield_scale = vector.multiply(exchangeclone.wield_scale, 1.5)
exchangeclone.wield_scale = vector.multiply(exchangeclone.wield_scale, 1.4)
-- Diamonds are used a lot.
exchangeclone.diamond_itemstring = "default:diamond"
if exchangeclone.mcl then
exchangeclone.diamond_itemstring = "mcl_core:diamond"
end
local doTileDrops = minetest.settings:get_bool("mcl_doTileDrops", true)
local function get_fortune_drops(fortune_drops, fortune_level)
local drop
local i = fortune_level
repeat
drop = fortune_drops[i]
i = i - 1
until drop or i < 1
return drop or {}
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
@ -292,6 +296,19 @@ function exchangeclone.inventory_formspec(x,y)
return formspec
end
-- Copied from MineClone2
local doTileDrops = minetest.settings:get_bool("mcl_doTileDrops", true)
local function get_fortune_drops(fortune_drops, fortune_level)
local drop
local i = fortune_level
repeat
drop = fortune_drops[i]
i = i - 1
until drop or i < 1
return drop or {}
end
local function discrete_uniform_distribution(drops, min_count, max_count, cap)
local new_drops = table.copy(drops)
for i, item in ipairs(drops) do
@ -321,6 +338,7 @@ local function get_drops(drop, toolname, param2, paramtype2)
return drops
end
-- Modified from MineClone2
function exchangeclone.drop_items_on_player(pos, drops, player) --copied from MineClone's code
if not exchangeclone.mcl then
return minetest.handle_node_drops(pos, drops, player)
@ -384,7 +402,7 @@ function exchangeclone.drop_items_on_player(pos, drops, player) --copied from Mi
end
end
--[[]] if tool and nodedef._mcl_fortune_drop and enchantments.fortune then
if tool and nodedef._mcl_fortune_drop and enchantments.fortune then
local fortune_level = enchantments.fortune
local fortune_drop = nodedef._mcl_fortune_drop
if fortune_drop.discrete_uniform_distribution then
@ -433,6 +451,7 @@ function exchangeclone.drop_items_on_player(pos, drops, player) --copied from Mi
end
end
-- Get the direction a player is facing (rounded to -1, 0, and 1 for each axis)
function exchangeclone.get_face_direction(player)
local h_look = player:get_look_horizontal()
local v_look = player:get_look_vertical()
@ -458,6 +477,7 @@ function exchangeclone.get_face_direction(player)
return result
end
-- Execute an action for every node within a cubic radius
function exchangeclone.node_radius_action(player, center, range, functions, extra_info)
if not functions.action then return end
local data
@ -489,6 +509,7 @@ function exchangeclone.node_radius_action(player, center, range, functions, extr
return data
end
-- Cooldowns
exchangeclone.cooldowns = {}
minetest.register_on_joinplayer(function(player, last_login)
@ -499,6 +520,7 @@ minetest.register_on_leaveplayer(function(player, timed_out)
exchangeclone.cooldowns[player:get_player_name()] = nil
end)
-- Start a <time>-second cooldown called <name> for <player>
function exchangeclone.start_cooldown(player, name, time)
local player_name = player:get_player_name()
exchangeclone.cooldowns[player_name][name] = time
@ -509,6 +531,7 @@ function exchangeclone.start_cooldown(player, name, time)
end)
end
-- Returns the TOTAL time of a cooldown called <name> for <player> or nil if no matching cooldown is running.
function exchangeclone.check_cooldown(player, name)
local player_name = player:get_player_name()
if exchangeclone.cooldowns[player_name] then