Still working on stuff

This commit is contained in:
ThePython 2023-09-28 15:15:18 -07:00
parent faebbdb8a1
commit cf0b99e147
4 changed files with 72 additions and 111 deletions

1
ExchangeClone.wiki Submodule

@ -0,0 +1 @@
Subproject commit 31462be25fec966ebe8f4ec778cb9ffa2bdc79cb

View File

@ -7,39 +7,13 @@ Allows players to turn items into energy (stored in orbs), and energy from orbs
[ContentDB](https://content.minetest.net/packages/ThePython/exchangeclone)
[Wiki](https://github.com/ThePython10110/ExchangeClone/wiki)
[Direct download](https://github.com/ThePython10110/ExchangeClone/archive/refs/heads/main.zip)
Dependencies: Minetest Game or MineClone.
## Features
* Orb that holds energy (left click while holding it to show charge)
* Collector that collects energy from the sun
* Deconstructor that can turn items into energy
* Constructor that can create items from energy
* Philosopher's Stone
* Alchemical Coal, Mobius Fuel, and Aeternalis Fuel
* Dark and Red Matter Orbs, Blocks, tools, and armor
## Config
All energy values are in `energy.lua`. You can also change the speed at which the Energy Collector collects energy (default: 5 energy/second) in `minetest.conf` or the Minetest settings.
## New features added by ThePython10110
*More information in `changelog.txt`.*
* Support for MineClone
* COMPLETELY redone energy values (originally, you could convert a single diamond into a diamond block... incredibly OP).
* Shift-clicking works with the Constructor/Deconstructor/Collector (`listring`s)
* Fixed a bug where items could be placed in the output slot of the Element Constructor
* Added the ability to add energy values by group
* Damaged tools now give less energy (based on wear)
* Added Philosopher's Stone
* Aux1-right-click and aux1-sneak-right-click to increase and decrease transmutation range (0-4 nodes away from the node you are currently standing on)
* Right-click and sneak-right-click to transmute nodes in range (two different modes with minor differences)
* Left-click to open crafting table (MineClone only)
* Shift-left-click to open enchanting table (MineClone only)
* Ability to exchange resources by crafting (the Philosopher's Stone is always returned)
* Alchemical Coal, Mobius Fuel, and Aeternalis Fuel
* Dark and Red Matter Orbs, Blocks, tools, and armor
See the [wiki](https://github.com/ThePython10110/ExchangeClone/wiki) for a list of features.
## Known issues:
* Dark and Red Matter armor look kind of terrible in MineClone. I might fix this eventually...
@ -220,7 +194,10 @@ If you have a suggestion or notice a bug, visit the [GitHub issues page](https:/
* An item copied from Project Expansion
* Allows you to use hoppers to get items into/out of your Personal Energy (MineClone)
* Upgraded Energy Collectors
* Energy Collector MK1-5
* Energy Collector MK1, MK2, MK3, MK4, and MK5
* By default, collected energy is sent to the player's personal energy.
* If an orb is inside an Energy Collector, energy will be stored in the orb instead.
* If it's near a DM/RM Furnace, any Energy Collector will power it instead of the orb or personal energy
* The ability to upgrade dark/red matter tools to give them fortune, looting, fire aspect, and silk touch
* The ability to upgrade dark/red matter armor to give it thorns and frost walker
* Mind, Life, Body, and Soul Stones

View File

@ -40,37 +40,38 @@ local function on_timer(pos, elapsed)
-- get node above
pos.y = pos.y + 1
if meta:get_bool("connected_to_furnace") then
if meta:get_int("connected_to_furnace") == 1 then
-- do nothing, energy is being used for the furnace.
return
end
local using_orb = true
if inv:is_empty("main") then
-- stop timer
using_orb = false
end
if minetest.get_artificial_light(pos) >= 14 then
if minetest.get_natural_light(pos) == 15 then
meta:set_int("has_light", 1)
local amount = meta:get_int("collector_amount")
if using_orb then
local dest_orb = inv:get_stack("main", 1)
local stored = exchangeclone.get_orb_energy(inv, "main", 1)
if stored + amount < exchangeclone.energy_max then
stored = stored + amount`
stored = stored + amount
exchangeclone.set_orb_energy(inv, "main", 1, stored)
end
else
local placer = meta:get_string("collector_placer")
if placer and placer ~= "" then
player = minetest.get_player_by_name(placer)
local player = minetest.get_player_by_name(placer)
if player then
local player_energy = exchangeclone.get_player_energy(player)
exchangeclone.set_player_energy(player_energy + amount)
exchangeclone.set_player_energy(player, player_energy + amount)
end
end
end
else
meta:set_int("has_light", 0)
end
return true
end
@ -80,7 +81,7 @@ local function on_construct(pos)
local inv = meta:get_inventory()
inv:set_size("main", 1)
meta:set_string("formspec", get_energy_collector_formspec())
on_timer(pos, 1, 4)
minetest.get_node_timer(pos):start(1)
end
local function allow_metadata_inventory_put(pos, listname, index, stack, player)
@ -138,7 +139,7 @@ local function on_dig_node(pos, oldnode, oldmetadata, player)
end
end
function exchangeclone.register_energy_collector(itemstring, name, amount, modifier)
function exchangeclone.register_energy_collector(itemstring, name, amount, modifier, recipe)
minetest.register_node(itemstring, {
description = "Energy Collector",
tiles = {
@ -149,13 +150,13 @@ function exchangeclone.register_energy_collector(itemstring, name, amount, modif
"exchangeclone_energy_collector_right.png"..modifier,
"exchangeclone_energy_collector_right.png"..modifier
},
groups = {cracky = 2, container = 2, pickaxey = 2},
groups = {cracky = 2, container = 2, pickaxey = 2, energy_collector = 1},
_mcl_hardness = 3,
_mcl_blast_resistance = 6,
sounds = exchangeclone.sound_mod.node_sound_metal_defaults(),
is_ground_content = false,
can_dig = can_dig,
on_timer = function(pos, elapsed) on_timer(pos, elapsed, amount) end,
on_timer = on_timer,
on_construct = on_construct,
after_dig_node = on_dig_node,
on_metadata_inventory_move = function(pos)
@ -169,15 +170,17 @@ function exchangeclone.register_energy_collector(itemstring, name, amount, modif
end,
after_place_node = function(pos, player, itemstack, pointed_thing)
local player_name = player:get_player_name()
local meta = minetest.get_meta(pos)
meta:set_int("collector_amount", amount)
meta:set_string("collector_placer", player_name)
meta:set_string("infotext", name.."\nOwned by"..player_name)
end
end,
on_blast = on_blast,
allow_metadata_inventory_put = allow_metadata_inventory_put,
allow_metadata_inventory_move = allow_metadata_inventory_move,
allow_metadata_inventory_take = allow_metadata_inventory_take,
})
minetest.register_craft(recipe)
end
--[[if minetest.get_modpath("pipeworks") then
@ -219,8 +222,7 @@ if exchangeclone.mineclone then
recipe_item_3 = "mcl_chests:chest"
end
minetest.register_craft({
type = "shaped",
exchangeclone.register_energy_collector("exchangeclone:energy_collector", "Energy Collector MK1", 4, "", {
output = "exchangeclone:energy_collector",
recipe = {
{recipe_item_2, recipe_item_2, recipe_item_2},

View File

@ -21,7 +21,6 @@ end
local function is_ore(itemstring)
if ores[itemstring] then return true end
local exchangeclone_ore = minetest.get_item_group(itemstring, "exchangeclone_ore")
minetest.log(tostring(exchangeclone_ore))
if exchangeclone_ore and exchangeclone_ore ~= 0 then return true end
return false
end
@ -34,70 +33,50 @@ local LIGHT_ACTIVE_FURNACE = 13
-- Formspecs
--
local function active_formspec(fuel_percent, item_percent, type)
return "size[9,8.75]"..
local base_formspec =
-- Craft guide button temporarily removed due to Minetest bug.
-- TODO: Add it back when the Minetest bug is fixed.
--"image_button[8,0;1,1;craftguide_book.png;craftguide;]"..
--"tooltip[craftguide;"..minetest.formspec_escape("Recipe book").."]"..
"size[9,8.75]"..
"label[0,4;Inventory]"..
"list[current_player;main;0,4.5;9,3;9]"..
"list[current_player;main;0,7.74;9,1;]"..
"label[2.75,0;"..type.." Matter Furnace]"..
"list[context;src;2.75,0.5;1,1;]"..
"list[context;fuel;2.75,2.5;1,1;]"..
"list[context;dst;5.75,1.5;1,1;]"..
"listring[context;dst]"..
"listring[current_player;main]"..
"listring[context;src]"..
"listring[current_player;main]"..
"listring[context;fuel]"..
"listring[current_player;main]"
if exchangeclone.mineclone then
base_formspec = base_formspec..
mcl_formspec.get_itemslot_bg(0,4.5,9,3)..
mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
mcl_formspec.get_itemslot_bg(2.75,0.5,1,1)..
mcl_formspec.get_itemslot_bg(2.75,2.5,1,1)..
mcl_formspec.get_itemslot_bg(5.75,1.5,1,1)
end
local function inactive_formspec(type)
return base_formspec..
"label[2.75,0;"..type.." Matter Furnace]"..
"image[2.75,1.5;1,1;default_furnace_fire_bg.png]"..
"image[4.1,1.5;1.5,1;gui_furnace_arrow_bg.png^[transformR270]"
end
local function active_formspec(fuel_percent, item_percent, type)
return base_formspec..
"image[2.75,1.5;1,1;default_furnace_fire_bg.png^[lowpart:"..
(100-fuel_percent)..":default_furnace_fire_fg.png]"..
"image[4.1,1.5;1.5,1;gui_furnace_arrow_bg.png^[lowpart:"..
(item_percent)..":gui_furnace_arrow_fg.png^[transformR270]"..
-- Craft guide button temporarily removed due to Minetest bug.
-- TODO: Add it back when the Minetest bug is fixed.
--"image_button[8,0;1,1;craftguide_book.png;craftguide;]"..
--"tooltip[craftguide;"..minetest.formspec_escape("Recipe book").."]"..
"listring[context;dst]"..
"listring[current_player;main]"..
"listring[context;src]"..
"listring[current_player;main]"..
"listring[context;fuel]"..
"listring[current_player;main]"
"label[2.75,0;"..type.." Matter Furnace]"
end
local function inactive_formspec(type)
return "size[9,8.75]"..
"label[0,4;"..minetest.formspec_escape(minetest.colorize("#313131", "Inventory")).."]"..
"list[current_player;main;0,4.5;9,3;9]"..
mcl_formspec.get_itemslot_bg(0,4.5,9,3)..
"list[current_player;main;0,7.74;9,1;]"..
mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
"label[2.75,0;"..minetest.formspec_escape(minetest.colorize("#313131", type.." Matter Furnace")).."]"..
"list[context;src;2.75,0.5;1,1;]"..
mcl_formspec.get_itemslot_bg(2.75,0.5,1,1)..
"list[context;fuel;2.75,2.5;1,1;]"..
mcl_formspec.get_itemslot_bg(2.75,2.5,1,1)..
"list[context;dst;5.75,1.5;1,1;]"..
mcl_formspec.get_itemslot_bg(5.75,1.5,1,1)..
"image[2.75,1.5;1,1;default_furnace_fire_bg.png]"..
"image[4.1,1.5;1.5,1;gui_furnace_arrow_bg.png^[transformR270]"..
-- Craft guide button temporarily removed due to Minetest bug.
-- TODO: Add it back when the Minetest bug is fixed.
--"image_button[8,0;1,1;craftguide_book.png;craftguide;]"..
--"tooltip[craftguide;"..minetest.formspec_escape("Recipe book").."]"..
"listring[context;dst]"..
"listring[current_player;main]"..
"listring[context;src]"..
"listring[current_player;main]"..
"listring[context;fuel]"..
"listring[current_player;main]"
end
if exchangeclone.mineclone then
active_formspec = active_formspec..
mcl_formspec.get_itemslot_bg(0,4.5,9,3)..
mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
mcl_formspec.get_itemslot_bg(2.75,0.5,1,1)..
mcl_formspec.get_itemslot_bg(2.75,2.5,1,1)..
mcl_formspec.get_itemslot_bg(5.75,1.5,1,1)
--currently adding mtg compatibility
end
local receive_fields = function(pos, formname, fields, sender)
if fields.craftguide then
mcl_craftguide.show(sender:get_player_name())
@ -303,10 +282,12 @@ local function check_for_collector(pos, set_furnace)
local collector_found = false
for _, check_pos in ipairs(check_positions) do
local check_node = minetest.get_node(vector.add(pos, check_pos))
if minetest.get_node_group(check_node.name, "energy_collector") > 0 then
minetest.log(minetest.get_meta(check_pos):get_int("has_light"))
if minetest.get_item_group(check_node.name, "energy_collector") > 0
and minetest.get_meta(check_pos):get_int("has_light") > 0 then
collector_found = true
if set_furnace ~= nil then
minetest.get_meta(check_pos):set_bool("connected_to_furnace", set_furnace)
minetest.get_meta(check_pos):set_int("connected_to_furnace", set_furnace)
end
end
end
@ -372,10 +353,11 @@ local function furnace_node_timer(pos, elapsed)
el = math.min(el, cooked.time - src_time)
end
local using_collector = check_for_collector(pos, true)
local using_collector = check_for_collector(pos, 1)
-- Check if we have enough fuel to burn
active = (fuel_time < fuel_totaltime) or using_collector
active = (fuel_time < fuel_totaltime) or (using_collector and cooked.item ~= ItemStack(""))
minetest.log(dump({using_collector, cooked.item}))
if cookable and not active then
-- We need to get new fuel
local afterfuel
@ -396,9 +378,13 @@ local function furnace_node_timer(pos, elapsed)
fuellist = inv:get_list("fuel")
end
elseif active then
el = math.min(el, fuel_totaltime - fuel_time)
-- The furnace is currently active and has enough fuel
fuel_time = fuel_time + el
if using_collector then
el = 10
else
-- The furnace is currently active and has enough fuel
el = math.min(el, fuel_totaltime - fuel_time)
fuel_time = fuel_time + el
end
end
-- If there is a cookable item then check if it is ready yet
@ -410,11 +396,7 @@ local function furnace_node_timer(pos, elapsed)
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
cooked.item:set_count(count*2)
else
minetest.log(type)
end
else
minetest.log(tostring(is_ore(cooked.item:get_name())))
end
inv:add_item("dst", cooked.item)
inv:set_stack("src", 1, aftercooked.items[1])
@ -424,7 +406,6 @@ local function furnace_node_timer(pos, elapsed)
--meta:set_int("xp", meta:get_int("xp") + 1) -- ToDo give each recipe an idividial XP count
end
end
elapsed_game_time = elapsed_game_time - el
end
@ -526,7 +507,7 @@ local inactive_def = {
end,
on_destruct = function(pos)
mcl_particles.delete_node_particlespawners(pos)
check_for_collector(pos, false)
check_for_collector(pos, 0)
--give_xp(pos)
end,
@ -596,7 +577,7 @@ local active_def = {
end,
on_destruct = function(pos)
mcl_particles.delete_node_particlespawners(pos)
check_for_collector(pos, false)
check_for_collector(pos, 0)
--give_xp(pos)
end,