Giving up for now.
This commit is contained in:
parent
3821ae518c
commit
a683beb709
15
README.md
15
README.md
|
@ -54,17 +54,30 @@ Dependencies: Minetest Game or MineClone.
|
|||
|
||||
<details><summary><h1>Changelog:</h1></summary>
|
||||
|
||||
### 6.0
|
||||
* New features
|
||||
* ExchangeClone can now generate energy values automatically based on crafting recipes! This means the list of energy values can be much shorter (although it does mean that it takes longer to load a world..... sorry).
|
||||
* Changes
|
||||
* 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.
|
||||
* The 2-billion-ish energy limit is has been increased to the actual maximum Lua allows. This may mean some precision is lost when your energy reaches a few quadrillion... but that's unlikely to happen, and at that point, it probably doesn't matter, so I'm not testing it.
|
||||
* Bugfixes
|
||||
*
|
||||
|
||||
### 5.2
|
||||
* Bugfixes
|
||||
* Removed unnecessary logging every time players take damage (I was testing stuff out with the armor)
|
||||
|
||||
### 5.1
|
||||
* Fixed Mineclonia energy values (I foolishly assumed that all items would have the same itemstrings and groups).
|
||||
* New features
|
||||
* Added new Mineclonia items (pottery, sculk, smithing templates, suspicious sand, etc.)
|
||||
* Changes
|
||||
* Changed a couple of energy values (enchanted golden apple was way too cheap, clay seemed too expensive)
|
||||
* Sword/Katar AOE damage now matches ProjectE (DM sword = 12, RM sword = 16, katar = 1000... kinda OP). All AOE cooldowns (including swinging swords/katar) are now 0.7 seconds.
|
||||
* DM/RM pickaxe/hammer/morningstar dig times now are approximately the same as ProjectE (at full charge), meaning they are now maybe too fast.
|
||||
* Red Matter Armor no longer increases player health (the wiki lied to me).
|
||||
* A couple of changes to DM/RM armor in MineClone, which may or may not be noticeable. I really don't know.
|
||||
* Bugfixes
|
||||
* Fixed Mineclonia energy values (I foolishly assumed that all items would have the same itemstrings and groups).
|
||||
|
||||
### 5.0 (the most insteresting release so far)
|
||||
**You MUST break and replace any existing Constructors, Deconstructors, and Energy Collectors when updating from any previous version. Nothing will be lost (hopefully). In Minetest Game, this is a bit of a problem (try blowing it up maybe? I don't know, sorry).**
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,4 +1,4 @@
|
|||
name = _exchangeclone_energy
|
||||
title = ExchangeClone Energy
|
||||
depends = exchangeclone, zzzz_exchangeclone_crafthook
|
||||
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 = 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, _mcl_autogroup
|
File diff suppressed because it is too large
Load Diff
|
@ -12,8 +12,33 @@ function exchangeclone.get_inventory_drops(pos, inventory, drops) --removes defa
|
|||
end
|
||||
end
|
||||
|
||||
function exchangeclone.get_item_energy(name)
|
||||
return minetest.registered_items[name].energy_value or -1
|
||||
function exchangeclone.get_item_energy(item)
|
||||
if type(item) == "string" and item:sub(1,6) == "group:" and exchangeclone.group_values then
|
||||
local item_group = item:sub(7,-1)
|
||||
for _, group in ipairs(exchangeclone.group_values) do
|
||||
if item_group == group[1] then return group[2] end
|
||||
end
|
||||
local group_items = exchangeclone.get_group_items(item_group)
|
||||
local cheapest
|
||||
for _, group_item in ipairs(group_items[item_group]) do
|
||||
local energy_value = exchangeclone.get_item_energy(group_item)
|
||||
if energy_value > 0 and ((not cheapest) or energy_value < cheapest) then
|
||||
cheapest = energy_value
|
||||
end
|
||||
end
|
||||
return cheapest
|
||||
end
|
||||
item = ItemStack(item)
|
||||
local def = minetest.registered_items[item:get_name()]
|
||||
if not def then return 0 end
|
||||
if item:get_name() == "exchangeclone:exchange_orb" then
|
||||
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()
|
||||
else
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
function exchangeclone.round(num)
|
||||
|
@ -30,20 +55,20 @@ function exchangeclone.map(input, min1, max1, min2, max2)
|
|||
end
|
||||
|
||||
function exchangeclone.get_orb_itemstack_energy(itemstack)
|
||||
if not itemstack then return -1 end
|
||||
if itemstack:get_name() ~= "exchangeclone:exchange_orb" then return -1 end
|
||||
if not itemstack then return end
|
||||
if itemstack:get_name() ~= "exchangeclone:exchange_orb" then return end
|
||||
return itemstack:get_meta():get_float("stored_energy") or 0
|
||||
end
|
||||
|
||||
function exchangeclone.get_orb_energy(inventory, listname, index)
|
||||
if not inventory then return -1 end
|
||||
if not inventory then return end
|
||||
if not listname then listname = "main" end
|
||||
if not index then index = 1 end
|
||||
local itemstack = inventory:get_stack(listname, index)
|
||||
return exchangeclone.get_orb_itemstack_energy(itemstack)
|
||||
end
|
||||
|
||||
if default then exchangeclone.sound_mod = default else exchangeclone.sound_mod = mcl_sounds end
|
||||
if exchangeclone.mcl then exchangeclone.sound_mod = mcl_sounds else exchangeclone.sound_mod = default end
|
||||
|
||||
function exchangeclone.set_orb_energy(inventory, listname, index, amount)
|
||||
if not inventory or amount < 0 then return end
|
||||
|
@ -51,7 +76,7 @@ function exchangeclone.set_orb_energy(inventory, listname, index, amount)
|
|||
if not index then index = 1 end
|
||||
local itemstack = inventory:get_stack(listname, index)
|
||||
if not itemstack then return end
|
||||
if not (itemstack:get_name() and itemstack:get_name() == "exchangeclone:exchange_orb") 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 return end -- don't allow more energy to be put into an over-filled orb
|
||||
|
||||
|
@ -128,7 +153,7 @@ function exchangeclone.set_player_energy(player, amount)
|
|||
exchangeclone.update_hud(player)
|
||||
end
|
||||
|
||||
-- copied from http://lua-users.org/wiki/IntegerDomain
|
||||
-- copied from http://lua-users.org/wiki/IntegerDomain {
|
||||
-- get highest power of 2 which Lua can still handle as integer
|
||||
local step = 2
|
||||
while true do
|
||||
|
@ -150,9 +175,15 @@ while step > 0 do
|
|||
step = math.floor(step/2)
|
||||
end
|
||||
|
||||
function exchangeclone.get_group_items(groups, allow_duplicates, include_no_group)
|
||||
-- }
|
||||
|
||||
function exchangeclone.get_group_items(groups, allow_duplicates, include_no_group, use_cache)
|
||||
if type(groups) ~= "table" then
|
||||
return nil
|
||||
if type(groups) == "string" then
|
||||
groups = {groups}
|
||||
else
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
allow_duplicates = allow_duplicates or false
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
exchangeclone = {}
|
||||
exchangeclone = {recipes = {}}
|
||||
|
||||
local old_func = minetest.register_craft
|
||||
function minetest.register_craft(...)
|
||||
local arg = {...}
|
||||
if arg.replacements then
|
||||
table.insert(exchangeclone.recipes, table.copy(arg))
|
||||
function minetest.register_craft(arg)
|
||||
if arg.output then
|
||||
exchangeclone.recipes[arg.output] = exchangeclone.recipes[arg.output] or {}
|
||||
table.insert(exchangeclone.recipes[arg.output], table.copy(arg))
|
||||
end
|
||||
old_func(...)
|
||||
old_func(arg)
|
||||
end
|
Loading…
Reference in New Issue