write something there

This commit is contained in:
N-Nachtigal 2025-05-04 16:01:41 +02:00
commit b4b6c08f4f
8546 changed files with 309825 additions and 0 deletions

View file

@ -0,0 +1,45 @@
# lootchests_modpack
Modpack adding various loot containers across the world to be found and providing an API, resources and integrations for other mods.
![Screenshot](screenshot.png)
## Requirements
- Minetest 5.0.0+
- Minetest_game 5.0.0+
- [magic_materials](https://github.com/ClockGen/magic_materials) (optional)
## Recommended mods
- [decorations_sea](https://github.com/ClockGen/decorations_sea) (Provides decorations when looking for ocean chests)
- [shipwrecks](https://github.com/ClockGen/shipwrecks) (Shipwrecks depend on lootchests_modpack to spawn lootchests in shipwrecks)
## Integrations
lootchests_default adds loot from following mods, if they are installed:
- 3d_armor
- Bonemeal
- farming_redo
- gadgets_modpack
- moreores
- moretrees
## Contents
Default lootchest pack provides:
- Baskets, spawning in caves from 0 to -128, containing various organic items (food, seeds, saplings, etc)
- Urns, spawning in caves from 0 to -128, containing various low-grade craftitems and tools (stone tools, ores up to iron, sticks, etc)
- Ocean chests, spawning in seabed and also very rare in caves, containing many precious materials and tools
- Ancient chests, spawning from -128 to -4096 in solid rock and also very rare in caverns, containing very expensive loot
Magic_materials pack provides:
- Rune urn, spawning in caves from -64 to -4096, containing low grade magic items from magic_materials
- rune chest, spawning from -64 to -4096 in solid rock and very rare in caverns, contains high grade items from magic_materials
## Making your own lootchests
Process of making your own lootchests is described in [documentation](lootchests/documentation.txt)
## License
All code is licensed under GPLv3 [link to the license](https://www.gnu.org/licenses/gpl-3.0.en.html)
All resources are licensed under CC BY 4.0 [link to the license](https://creativecommons.org/licenses/by/4.0/legalcode)

View file

@ -0,0 +1 @@
Modpack adding a lot of various loot containers across the world to be found and providing an API, resources and integrations for other mods

View file

@ -0,0 +1,197 @@
lootchests = {}
lootchests.loot_table = {}
lootchests.spawn_chests = asuna.content.wayfarer.loot_chests
local S = minetest.get_translator(minetest.get_current_modname())
local debug = minetest.settings:get("lootchests_debug") or false
local function list_length(list)
local count = 0
for _,_ in pairs(list) do
count = count + 1
end
return count
end
lootchests.add_to_loot_table = function(key, add)
if not lootchests.loot_table[key] then
lootchests.loot_table[key] = {}
end
for _,v in pairs(add) do
table.insert(lootchests.loot_table[key], v)
end
end
local water_nodes = {
"default:water_source",
"default:river_water_source",
"default:lava_source",
"ethereal:quicksand2",
}
lootchests.register_lootchest = function(def)
if not def.name or not def.description then
minetest.log("error", S("[lootchests] Missing fields in chest definition!"))
return
end
if not lootchests.loot_table[def.name] then
minetest.log("error", S("[lootchests] Missing loot table for") .. " " .. def.name .. "!")
return
end
local tiles = def.tiles or {
"default_chest_top.png",
"default_chest_top.png",
"default_chest_side.png",
"default_chest_side.png",
"default_chest_front.png",
}
local sounds = def.sounds or default.node_sound_wood_defaults()
local groups = def.groups or {choppy = 2, oddly_breakable_by_hand = 2}
local rarity = def.spawn_in_rarity or 512
local fill_ratio = def.spawn_on_rarity or 512
local ymax = def.ymax or 31000
local ymin = def.ymin or -31000
local slot_spawn_chance = def.slot_spawn_chance or 0.25
local slots = def.slots or 32
local node_box = def.node_box or {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
}
local marker_drawtype = "airlike"
local marker_groups = {dig_immediate = 2, not_in_creative_inventory = 1}
if debug then
marker_drawtype = nil
marker_groups = {dig_immediate = 2}
end
minetest.register_node(def.name .. "_marker", {
drawtype = marker_drawtype,
description = def.description .. " " .. S("Spawn Marker"),
tiles = {"lootchests_marker_top.png", "lootchests_marker_side.png"},
groups = marker_groups,
paramtype2 = "facedir",
})
minetest.register_node(def.name, {
description = def.description,
drawtype = def.drawtype,
tiles = tiles,
node_box = node_box,
selection_box = node_box,
groups = groups,
sounds = sounds,
paramtype = "light",
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec",
"size[8,9]" ..
default.gui_bg ..
default.gui_bg_img ..
default.gui_slots ..
"list[current_name;main;0,0;8,5;]" ..
"list[current_player;main;0,5;8,4;]" ..
"listring[current_name;main]" ..
"listring[current_player;main]"
)
meta:set_string("infotext", def.description)
local inv = meta:get_inventory()
inv:set_size("main", slots)
end,
can_dig = function(pos,player)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
return inv:is_empty("main")
end,
})
-- Function for checking underwater
local check_water
if not def.underwater then
check_water = function(pos)
for _,waterpos in ipairs({
{ x = pos.x - 1, y = pos.y, z = pos.z - 1 },
{ x = pos.x + 1, y = pos.y, z = pos.z - 1 },
{ x = pos.x - 1, y = pos.y, z = pos.z + 1 },
{ x = pos.x + 1, y = pos.y, z = pos.z + 1 },
}) do
for _,water_node in ipairs(water_nodes) do
if minetest.get_node(waterpos).name == water_node then
return true -- found nearby water, trigger check
end
end
end
return false -- did not find nearby water, do not trigger check
end
else
check_water = function()
return false -- check never triggers
end
end
if not debug and lootchests.spawn_chests then
minetest.register_lbm({
label = S("Upgrade") .. " " .. def.description,
name = def.name .. "_marker_replace",
nodenames = def.name .. "_marker",
run_at_every_load = true,
action = function(pos, node)
if check_water(pos) then
minetest.set_node(pos, {name = "default:water_source", param2 = 0})
return -- loot chest is underwater and should not be, do not place here
else
minetest.set_node(pos, {name = def.name, param2 = 0})
end
local rand = PcgRandom(pos.x * pos.y * pos.z)
local inv = minetest.get_inventory({type = "node", pos = pos})
for i = 1, slots do
if rand:next(0,100) <= slot_spawn_chance then
local item_def = lootchests.loot_table[def.name][rand:next(1, #lootchests.loot_table[def.name])]
local item_name = item_def[#item_def < 3 and 1 or rand:next(1,#item_def - 1)]
local stack = ItemStack(item_name)
if minetest.registered_tools[item_name] then
stack:set_wear(rand:next(1,65535))
else
stack:set_count(rand:next(1, item_def[#item_def]))
end
inv:set_stack("main", i, stack)
end
end
end,
})
end
if def.spawn_in and lootchests.spawn_chests then
minetest.register_ore({
ore_type = "scatter",
ore = def.name .. "_marker",
wherein = def.spawn_in,
clust_scarcity = rarity * rarity * rarity,
clust_num_ores = 1,
clust_size = 25,
y_min = ymin,
y_max = ymax,
})
end
if def.spawn_on and lootchests.spawn_chests then
minetest.register_decoration({
deco_type = "simple",
place_on = def.spawn_on,
spawn_by = def.spawn_by,
num_spawn_by = def.num_spawn_by,
sidelen = 80,
fill_ratio = 1/fill_ratio,
y_min = ymin,
y_max = ymax,
flags = "force_placement, all_floors",
decoration = def.name .. "_marker",
})
end
end

View file

@ -0,0 +1 @@
default

View file

@ -0,0 +1 @@
An API for registering various loot containers

View file

@ -0,0 +1,70 @@
To spawn the lootchests, world is populated by spawn chest markers of corresponding type.
During the normal gameplay, they are of "airlike" type and are replaced with LBM which replaces them with corresponding chests and fill them with loot.
If minetest.conf setting "lootchests_debug = true" is active, markers are not replaced and can be taken from the creative inventory.
This can be used for placing them manually for various purposes, mainly for adding lootchest markers to schematics.
Creating a lootchest consists of two parts: defining the lootchest itself with lootchests.register_lootchest(def)
and creating a corresponding loot table in lootchests.loot_table[def.name]. Examples are below.
Example of a lootchest definition:
lootchests.register_lootchest({
--Mandatory
name = "lootchests:default_chest", --ID of the lootchest. A table with corresponding key should be created in tables.loot_table
description = "Loot Chest", --Name as it appears in inventory, also lootchest infobox
--Visuals
drawtype = "nodebox", --Drawtype of the node. Don't define for default node look
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
}, --Nodebox def if drawtype is "nodebox"
tiles = {
"default_chest_top.png",
"default_chest_top.png",
"default_chest_side.png",
"default_chest_side.png",
"default_chest_front.png",
}, --Node tile definition
--Sounds and groups
sounds = default.node_sound_wood_defaults(), --Node sound definition
groups = {choppy = 2, oddly_breakable_by_hand = 2}, --Node groups
--Spawning
spawn_in = {"default:sand", "default:desert_sand"}, --Spawn in which nodes, may be one itemstring or a list of them
spawn_on = {"default:stone", "default:desert_stone"}, --Spawn on which nodes, may be one itemstring or a list of them
spawn_in_rarity = 25, --Spawn in rarity, approximate spacing between each node
spawn_on_rarity = 1000. --Spawn on rarity, spawns one out of defined value (if default is 1000 then on 1 out of 1000)
--Height limit
ymax = 5, --Max Y limit
ymin = -64, --Min Y limit
--Container parameters
slot_spawn_chance = 50, --Chance to spawn something in a container slot. Ranges from 0 to 100
slots = 32, --Total amount of slots in the container. Max is 32
})
To actually add loot to your lootchests, you need to define a loot table in lootchests.loot_table. Table must be accessible by the key which equals to
the lootchest ID.
Example of a loot table definition for "lootchests:default_chest":
lootchests.loot_table["lootchests:default_chest"] = {
{"default:stick", 16}, --Each item definition is a table with 2 elements - their itemstring and maximum amount
{"default:axe_stone"}, --If defined item is a tool, it doesn't need an amount definition, there will always be one anyway
--Tools spawn with random wear instead
{"default:stone", 64},
}
Third-party mods can also access and modify loot tables, you can add custom items to them manually, or by using
lootchests.add_to_loot_table(key, items), where "key" is the lootchest ID and "items" is another table with loot.
Example:
local items = {
{"custom_mod:custom_item_01", 15},
{"custom_mod:custom_item_02", 32},
}
lootchests.add_to_loot_table("lootchests:default_chest", items)

View file

@ -0,0 +1 @@
dofile(minetest.get_modpath("lootchests").."/api.lua")

View file

@ -0,0 +1,6 @@
# textdomain: lootchests
[lootchests] Missing fields in chest definition!=[lootchests] Отсутствуют поля в определении сундука!
[lootchests] Missing loot table for=[lootchests] Отсутствует таблица добычи для
Spawn Marker=Маркер появления
Upgrade=Обновление

View file

@ -0,0 +1 @@
name = lootchests

Binary file not shown.

After

Width:  |  Height:  |  Size: 582 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 644 B

View file

@ -0,0 +1,203 @@
local S = minetest.get_translator(minetest.get_current_modname())
lootchests.register_lootchest({
name = "lootchests_default:ocean_chest",
description = S("Ocean Chest"),
spawn_in = {"default:sand", "default:desert_sand", "default:silver_sand"},
spawn_on = {"default:sand"},
underwater = true,
sounds = default.node_sound_wood_defaults(),
groups = {choppy = 2, oddly_breakable_by_hand = 2},
ymax = -11,
ymin = -36,
spawn_in_rarity = 80,
spawn_on_rarity = 2750,
spawn_by = {
"group:wood", -- sunken ships
"marinara:sand_with_kelp", -- thick kelp
},
num_spawn_by = 2,
slot_spawn_chance = 55,
slots = 32,
})
local chest_spawning = {
on = {
"group:stone",
"default:sand",
"default:dirt",
"default:dry_dirt",
"default:dirt_with_grass",
"default:dirt_with_dry_grass",
"default:dry_dirt_with_dry_grass",
"default:dirt_with_coniferous_litter",
"default:dirt_with_rainforest_litter",
"default:desert_sand",
"ethereal:grove_dirt",
"ethereal:bamboo_dirt",
"dorwinion:dorwinion_grass",
"prairie:prairie_dirt_with_grass",
"nightshade:nightshade_dirt_with_grass",
"badland:badland_grass",
"japaneseforest:japanese_dirt_with_grass",
"naturalbiomes:alderswamp_litter",
"naturalbiomes:alpine_litter",
"naturalbiomes:mediterran_litter",
"naturalbiomes:outback_litter",
"naturalbiomes:savanna_litter",
"livingjungle:jungleground",
"livingjungle:leafyjungleground",
"group:soil",
"caverealms:stone_with_moss",
"caverealms:stone_with_lichen",
"caverealms:stone_with_algae",
"caverealms:stone_with_salt",
"caverealms:hot_cobble",
"default:clay",
"everness:forsaken_desert_sand",
"everness:forsaken_tundra_dirt",
"everness:frosted_snowblock",
"default:snowblock",
"everness:dirt_with_cursed_grass",
"everness:dirt_with_crystal_grass",
"everness:dirt_with_coral_grass",
"everness:moss_block",
"everness:crystal_moss_block",
"everness:emerald_ice",
"everness:ancient_emerald_ice",
"everness:dense_emerald_ice",
"everness:frosted_ice",
"everness:frosted_ice_translucent",
},
by = {
"group:tree",
"group:leaves",
"group:stone",
"default:sand",
"default:dirt",
"default:dry_dirt",
"default:dirt_with_grass",
"default:dirt_with_dry_grass",
"default:dry_dirt_with_dry_grass",
"default:dirt_with_coniferous_litter",
"default:dirt_with_rainforest_litter",
"default:desert_sand",
"ethereal:grove_dirt",
"ethereal:bamboo_dirt",
"dorwinion:dorwinion_grass",
"prairie:prairie_dirt_with_grass",
"nightshade:nightshade_dirt_with_grass",
"badland:badland_grass",
"japaneseforest:japanese_dirt_with_grass",
"naturalbiomes:alderswamp_litter",
"naturalbiomes:alpine_litter",
"naturalbiomes:mediterran_litter",
"naturalbiomes:outback_litter",
"naturalbiomes:savanna_litter",
"livingjungle:jungleground",
"livingjungle:leafyjungleground",
"group:soil",
"caverealms:stone_with_moss",
"caverealms:stone_with_lichen",
"caverealms:stone_with_algae",
"caverealms:stone_with_salt",
"caverealms:hot_cobble",
"default:clay",
"everness:forsaken_desert_sand",
"everness:forsaken_tundra_dirt",
"everness:frosted_snowblock",
"default:snowblock",
"everness:dirt_with_cursed_grass",
"everness:dirt_with_crystal_grass",
"everness:dirt_with_coral_grass",
"everness:moss_block",
"everness:crystal_moss_block",
"everness:emerald_ice",
"everness:ancient_emerald_ice",
"everness:dense_emerald_ice",
"everness:frosted_ice",
"everness:frosted_ice_translucent",
}
}
lootchests.register_lootchest({
name = "lootchests_default:basket",
description = S("Basket"),
tiles = {
"lootchests_default_basket_top.png",
"lootchests_default_basket_top.png",
"lootchests_default_basket_side.png",
},
spawn_on = chest_spawning.on,
sounds = default.node_sound_wood_defaults(),
groups = {snappy = 2, oddly_breakable_by_hand = 2},
ymax = 31000,
ymin = -256,
spawn_on_rarity = 4900,
spawn_by = chest_spawning.by,
num_spawn_by = 9,
slot_spawn_chance = 40,
slots = 24,
})
lootchests.register_lootchest({
name = "lootchests_default:urn",
description = S("Urn"),
tiles = {
"lootchests_default_urn_top.png",
"lootchests_default_urn_top.png",
"lootchests_default_urn_side.png",
},
spawn_on = chest_spawning.on,
sounds = default.node_sound_stone_defaults(),
groups = {cracky = 2, oddly_breakable_by_hand = 2},
ymax = 0,
ymin = -4096,
spawn_on_rarity = 4900,
spawn_by = chest_spawning.by,
num_spawn_by = 9,
slot_spawn_chance = 40,
slots = 24,
})
lootchests.register_lootchest({
name = "lootchests_default:barrel",
description = S("Barrel"),
tiles = {
"lootchests_default_barrel_top.png",
"lootchests_default_barrel_top.png",
"lootchests_default_barrel_side.png",
},
spawn_in = {"default:sand", "default:desert_sand", "default:silver_sand"},
sounds = default.node_sound_wood_defaults(),
groups = {choppy = 2, oddly_breakable_by_hand = 2},
ymax = -3,
ymin = -32,
spawn_in_rarity = 80,
slot_spawn_chance = 40,
slots = 24,
})
lootchests.register_lootchest({
name = "lootchests_default:stone_chest",
description = S("Ancient Chest"),
tiles = {
"lootchests_default_stone_chest_top.png",
"lootchests_default_stone_chest_top.png",
"lootchests_default_stone_chest_side.png",
"lootchests_default_stone_chest_side.png",
"lootchests_default_stone_chest_front.png",
},
spawn_in = {"group:stone"},
spawn_on = {"group:stone"},
spawn_by = {"group:stone"},
num_spawn_by = 11,
sounds = default.node_sound_stone_defaults(),
groups = {cracky = 2},
ymax = -256,
ymin = -31000,
spawn_in_rarity = 80,
spawn_on_rarity = 12500,
slot_spawn_chance = 55,
slots = 32,
})

View file

@ -0,0 +1,38 @@
default
lootchests
tnt
vessels
screwdriver
map
fire
dye
wool
carts
bucket
boats
binoculars
farming
flowers
flowerpot?
beautiflowers?
herbs?
3d_armor?
shields?
bonemeal?
moreores?
moretrees?
too_many_stones?
bakedclay?
animalia?
gadgets_consumables?
ethereal?
livingjungle?
marinara?
naturalbiomes?
dorwinion?
prairie?
badland?
frost_land?
japanese_forest?
asuna_core?
x_farming?

View file

@ -0,0 +1 @@
Part of lootchests_modpack, providing lootchests for minetest_game, as well as integration with some mods

View file

@ -0,0 +1,35 @@
local path = minetest.get_modpath("lootchests_default")
dofile(path .. "/item_tables.lua")
dofile(path .. "/chests.lua")
if minetest.get_modpath("3d_armor") then
dofile(path .. "/mod_support/3d_armor.lua")
end
if minetest.get_modpath("shields") then
dofile(path .. "/mod_support/3d_armor_shields.lua")
end
if minetest.get_modpath("bonemeal") then
dofile(path .. "/mod_support/bonemeal.lua")
end
if minetest.get_modpath("farming") and farming and farming.mod == "redo" then
dofile(path .. "/mod_support/farming_redo.lua")
end
if minetest.get_modpath("gadgets_consumables") then
dofile(path .. "/mod_support/gadgets_modpack.lua")
end
if minetest.get_modpath("moreores") then
dofile(path .. "/mod_support/moreores.lua")
end
if minetest.get_modpath("moretrees") then
dofile(path .. "/mod_support/moretrees.lua")
end
if minetest.get_modpath("asuna_core") then
dofile(path .. "/mod_support/asuna.lua")
end

View file

@ -0,0 +1,173 @@
lootchests.loot_table["lootchests_default:ocean_chest"] = {
{"default:stick", 16},
{"default:paper", 4},
{"default:book", 3},
{"default:skeleton_key", 1},
{"default:flint", 4},
{"default:obsidian_shard", 24},
{"default:clay_brick", 32},
{"default:mese_crystal_fragment", 4},
{"default:gold_ingot", 8},
{"default:bronze_ingot", 8},
{"default:tin_ingot", 8},
{"default:copper_ingot", 8},
{"default:steel_ingot", 8},
{"default:coal_lump", 16},
{"default:pick_stone"},
{"default:pick_bronze"},
{"default:pick_steel"},
{"default:shovel_stone"},
{"default:shovel_bronze"},
{"default:shovel_steel"},
{"default:axe_stone"},
{"default:axe_bronze"},
{"default:axe_steel"},
{"default:sword_stone"},
{"default:sword_bronze"},
{"default:sword_steel"},
{"default:bookshelf", 4},
{"default:sign_wall_wood", 2},
{"default:ladder_wood", 32},
{"default:ladder_steel", 16},
{"default:glass", 24},
{"default:obsidian_glass", 8},
{"tnt:gunpowder", 16},
{"vessels:glass_bottle", 8},
{"vessels:drinking_glass", 8},
{"screwdriver:screwdriver"},
{"map:mapping_kit", 1},
{"fire:flint_and_steel"},
{"wool:white", 16},
{"carts:rail", 24},
{"carts:powerrail", 12},
{"carts:brakerail", 12},
{"carts:cart", 1},
{"bucket:bucket_empty", 2},
{"boats:boat", 1},
{"binoculars:binoculars", 1},
{
"default:coral_green",
"default:coral_pink",
"default:coral_cyan",
"default:coral_brown",
"default:coral_orange",
3,
},
}
lootchests.loot_table["lootchests_default:basket"] = {
{"default:stick", 16},
{"default:tree", 4},
{"default:jungletree", 4},
{"default:pine_tree", 4},
{"default:cactus", 4},
{"default:large_cactus_seedling", 2},
{"default:papyrus", 8},
{"default:junglegrass", 4},
{"default:grass_1", 4},
{"default:blueberry_bush_sapling", 4},
{
"default:sapling",
"default:junglesapling",
"default:pine_sapling",
"default:acacia_sapling",
"default:aspen_sapling",
1,
},
{
"default:leaves",
"default:acacia_leaves",
"default:pine_needles",
"default:aspen_leaves",
"default:jungleleaves",
10,
},
{"wool:white", 8},
{"farming:wheat", 8},
{"farming:flour", 4},
{"farming:cotton", 4},
{"farming:string", 4},
{"flowers:mushroom_red", 8},
{"ethereal:vine", 6},
{"vessels:glass_bottle", 2},
}
lootchests.loot_table["lootchests_default:urn"] = {
{"default:stick", 16},
{"default:paper", 4},
{"default:flint", 4},
{"default:clay_lump", 16},
{"default:tin_lump", 8},
{"default:copper_lump", 8},
{"default:iron_lump", 8},
{"default:coal_lump", 16},
{"default:pick_stone"},
{"default:shovel_stone"},
{"default:axe_stone"},
{"default:sword_stone"},
{"default:sign_wall_wood", 1},
{"default:ladder_wood", 8},
{"vessels:glass_bottle", 4},
{"fire:flint_and_steel"},
{"wool:white", 8},
{"farming:flour", 4},
{"default:tree", 2},
{"default:jungletree", 2},
{"default:pine_tree", 2},
{"default:cobble", 60},
{"caverealms:glow_gem", 6},
{"default:gravel", 24},
{"default:torch", 8},
{"default:obsidian", 3}
}
lootchests.loot_table["lootchests_default:barrel"] = lootchests.loot_table["lootchests_default:urn"]
lootchests.loot_table["lootchests_default:stone_chest"] = {
{"default:coalblock", 4},
{"default:steelblock", 2},
{"default:copperblock", 2},
{"default:tinblock", 2},
{"default:bronzeblock", 2},
{"default:mese", 2},
{"default:meselamp", 4},
{"default:stick", 16},
{"default:paper", 4},
{"default:book", 3},
{"default:skeleton_key", 1},
{"default:flint", 4},
{"default:obsidian", 24},
{"default:clay_brick", 32},
{"default:mese_crystal", 16},
{"default:diamond", 16},
{"default:gold_ingot", 16},
{"default:bronze_ingot", 16},
{"default:tin_ingot", 16},
{"default:copper_ingot", 16},
{"default:steel_ingot", 16},
{"default:coal_lump", 32},
{"default:pick_bronze"},
{"default:pick_steel"},
{"default:pick_mese"},
{"default:shovel_bronze"},
{"default:shovel_steel"},
{"default:shovel_mese"},
{"default:axe_bronze"},
{"default:axe_steel"},
{"default:axe_mese"},
{"default:sword_bronze"},
{"default:sword_steel"},
{"default:sword_mese"},
{"default:glass", 32},
{"default:obsidian_glass", 16},
{"tnt:gunpowder", 32},
{"vessels:glass_bottle", 32},
{"vessels:drinking_glass", 32},
{"fire:flint_and_steel"},
{"carts:rail", 64},
{"carts:powerrail", 32},
{"carts:brakerail", 32},
{"carts:cart", 2},
{"bucket:bucket_empty", 8},
{"boats:boat", 2},
}

View file

@ -0,0 +1,7 @@
# textdomain: lootchests_default
Loot Chest=Сундук с добычей
Basket=Корзина
Urn=Урна
Barrel=Бочка
Ancient Chest=Древний сундук

View file

@ -0,0 +1 @@
name = lootchests_default

View file

@ -0,0 +1,36 @@
local cheap_items = {
{"3d_armor:helmet_wood"},
{"3d_armor:chestplate_wood"},
{"3d_armor:leggings_wood"},
{"3d_armor:boots_wood"},
{"3d_armor:helmet_cactus"},
{"3d_armor:chestplate_cactus"},
{"3d_armor:leggings_cactus"},
{"3d_armor:boots_cactus"},
}
local medium_items = {
{"3d_armor:helmet_steel"},
{"3d_armor:chestplate_steel"},
{"3d_armor:leggings_steel"},
{"3d_armor:boots_steel"},
{"3d_armor:helmet_bronze"},
{"3d_armor:chestplate_bronze"},
{"3d_armor:leggings_bronze"},
{"3d_armor:boots_bronze"},
}
local expensive_items = {
{"3d_armor:helmet_gold"},
{"3d_armor:chestplate_gold"},
{"3d_armor:leggings_gold"},
{"3d_armor:boots_gold"},
{"3d_armor:helmet_diamond"},
{"3d_armor:chestplate_diamond"},
{"3d_armor:leggings_diamond"},
{"3d_armor:boots_diamond"},
}
lootchests.add_to_loot_table("lootchests_default:ocean_chest", medium_items)
lootchests.add_to_loot_table("lootchests_default:urn", cheap_items)
lootchests.add_to_loot_table("lootchests_default:stone_chest", expensive_items)

View file

@ -0,0 +1,20 @@
local cheap_items = {
{"shields:shield_wood"},
{"shields:shield_enhanced_wood"},
{"shields:shield_cactus"},
{"shields:shield_enhanced_cactus"},
}
local medium_items = {
{"shields:shield_steel"},
{"shields:shield_bronze"},
}
local expensive_items = {
{"shields:shield_gold"},
{"shields:shield_diamond"},
}
lootchests.add_to_loot_table("lootchests_default:ocean_chest", medium_items)
lootchests.add_to_loot_table("lootchests_default:urn", cheap_items)
lootchests.add_to_loot_table("lootchests_default:stone_chest", expensive_items)

View file

@ -0,0 +1,388 @@
--[[
Define loot groups
]]
local loot_groups = {
too_many_stones = {
crystals = {
"too_many_stones:celestine_crystal",
"too_many_stones:amethyst_crystal",
"too_many_stones:heliodor_crystal",
"too_many_stones:vivianite_crystal",
"too_many_stones:prasiolite_crystal",
"too_many_stones:crocoite_crystal",
"too_many_stones:quartz_crystal",
"too_many_stones:rose_quartz_crystal",
"too_many_stones:smokey_quartz_crystal",
"too_many_stones:citrine_crystal",
8,
},
precious_stones = {
"too_many_stones:celestine",
"too_many_stones:amethyst",
"too_many_stones:heliodor",
"too_many_stones:vivianite",
"too_many_stones:prasiolite",
"too_many_stones:crocoite",
"too_many_stones:quartz",
"too_many_stones:rose_quartz",
"too_many_stones:smokey_quartz",
"too_many_stones:citrine",
"too_many_stones:black_moonstone",
"too_many_stones:marble",
8,
},
common_stones = {
"too_many_stones:granite_white",
"too_many_stones:granite_gray",
30,
},
opal = {
"too_many_stones:opal",
"too_many_stones:fire_opal",
"too_many_stones:black_opal",
8,
},
glowing_stones = {
"too_many_stones:glow_apatite",
"too_many_stones:glow_calcite",
"too_many_stones:glow_esperite",
"too_many_stones:glow_fluorite",
"too_many_stones:glow_selenite",
"too_many_stones:glow_sodalite",
"too_many_stones:glow_willemite",
"too_many_stones:glow_apatite",
"too_many_stones:glow_calcite",
"too_many_stones:glow_esperite",
"too_many_stones:glow_fluorite",
"too_many_stones:glow_selenite",
"too_many_stones:glow_sodalite",
"too_many_stones:glow_willemite",
6,
}
},
marinara = {
seashells = {
"marinara:seashells_white",
"marinara:seashells_yellow",
"marinara:seashells_brown",
"marinara:seashells_pink",
"marinara:seashells_orange",
4,
},
},
x_farming = {
seeds = {
"x_farming:seed_barley",
"x_farming:seed_beetroot",
"x_farming:large_cactus_with_fruit_seedling",
"x_farming:seed_carrot",
"x_farming:jungle_with_cocoa_sapling",
"x_farming:seed_coffee",
"x_farming:seed_corn",
"x_farming:kiwi_sapling",
"x_farming:seed_melon",
"x_farming:pine_nut_sapling",
"x_farming:seed_pumpkin",
"x_farming:seed_rice",
"x_farming:seed_potato",
"x_farming:seed_soybean",
"x_farming:seed_stevia",
"x_farming:seed_strawberry",
4,
},
surface_crops = {
"x_farming:barley",
"x_farming:beetroot",
"x_farming:cactus_fruit_item",
"x_farming:carrot",
"x_farming:cocoa_bean",
"x_farming:coffee",
"x_farming:corn",
"x_farming:kiwi_fruit",
"x_farming:melon",
"x_farming:pine_nut_sapling",
"x_farming:pumpkin",
"x_farming:rice",
"x_farming:potato",
"x_farming:soybean",
"x_farming:stevia",
"x_farming:strawberry",
4,
},
underground_crops = {
"x_farming:seed_beetroot",
"x_farming:potato",
4,
},
rope = {
"x_farming:rope",
16,
},
},
flowers = {
all_flowers = {
"flowers:tulip_black",
"beautiflowers:carla",
"beautiflowers:cloe",
"beautiflowers:genesis",
"beautiflowers:gloria",
"beautiflowers:hadassa",
"beautiflowers:ingrid",
"beautiflowers:irene",
"beautiflowers:iris",
"beautiflowers:ivette",
"beautiflowers:michelle",
"beautiflowers:suri",
"flowers:dandelion_white",
"herbs:achillea_white",
"herbs:leontopodium_white",
"herbs:leucanthemum_white",
"herbs:trifolium_white",
"beautiflowers:beatriz",
"beautiflowers:berta",
"flowers:geranium",
"herbs:centaurea",
"herbs:campanula_blue",
"herbs:digitalis_blue",
"herbs:iris",
"bakedclay:delphinium",
"beautiflowers:thais",
"beautiflowers:valentina",
"beautiflowers:valeria",
"beautiflowers:vera",
"beautiflowers:victoria",
"beautiflowers:virginia",
"beautiflowers:xenia",
"beautiflowers:zaida",
"beautiflowers:dafne",
"beautiflowers:dana",
"beautiflowers:delia",
"beautiflowers:elena",
"beautiflowers:erica",
"beautiflowers:estela",
"beautiflowers:eva",
"beautiflowers:fabiola",
"beautiflowers:fiona",
"beautiflowers:gala",
"flowers:tulip",
"beautiflowers:ada",
"beautiflowers:agnes",
"beautiflowers:alicia",
"beautiflowers:alma",
"beautiflowers:amaia",
"beautiflowers:anastasia",
"beautiflowers:any",
"flowers:dandelion_yellow",
"herbs:digitalis_yellow",
"herbs:plantago",
"beautiflowers:arleth",
"beautiflowers:astrid",
"beautiflowers:belen",
"beautiflowers:blanca",
"beautiflowers:casandra",
"beautiflowers:clara",
"beautiflowers:claudia",
"beautiflowers:minerva",
"beautiflowers:miriam",
"beautiflowers:nazareth",
"beautiflowers:noemi",
"beautiflowers:olga",
"beautiflowers:paula",
"beautiflowers:regina",
"beautiflowers:rocio",
"beautiflowers:sabrina",
"beautiflowers:vanesa",
"flowers:viola",
"beautiflowers:xena",
"beautiflowers:arcoiris",
"beautiflowers:jennifer",
"beautiflowers:lara",
"beautiflowers:laura",
"beautiflowers:lidia",
"beautiflowers:lucia",
"beautiflowers:mara",
"beautiflowers:martina",
"beautiflowers:melania",
"beautiflowers:mireia",
"beautiflowers:nadia",
"beautiflowers:nerea",
"beautiflowers:noelia",
"flowers:rose",
"herbs:dosera",
"herbs:papaver_red",
"beautiflowers:caroline",
"beautiflowers:cristina",
"beautiflowers:diana",
"beautiflowers:gisela",
"beautiflowers:olimpia",
"beautiflowers:oriana",
"beautiflowers:pia",
"beautiflowers:raquel",
"beautiflowers:ruth",
"beautiflowers:sandra",
"beautiflowers:sara",
"beautiflowers:silvia",
"beautiflowers:sofia",
"beautiflowers:sonia",
"beautiflowers:talia",
"herbs:antirrhinum",
"herbs:trifolium_red",
"bakedclay:thistle",
"bakedclay:lazarus",
"flowers:chrysanthemum_green",
"beautiflowers:pasto_1",
"beautiflowers:pasto_2",
"beautiflowers:pasto_3",
"beautiflowers:pasto_4",
"beautiflowers:pasto_5",
"beautiflowers:pasto_6",
"beautiflowers:pasto_7",
"beautiflowers:pasto_8",
"beautiflowers:pasto_9",
"beautiflowers:pasto_10",
"bakedclay:mannagrass",
6,
},
brown_mushrooms = {
"flowers:mushroom_brown",
"herbs:mushroom_boletus",
"herbs:mushroom_macrolepiota",
4,
},
},
flowerpot = {
pot = {
"flowerpot:empty",
1,
},
},
animalia = {
feather = {
"animalia:feather",
3,
},
leather = {
"animalia:leather",
2,
},
},
ethereal = {
fruit = {
"ethereal:banana",
3,
},
bowl = {
"ethereal:bowl",
1,
},
},
bakedclay = {
clay = {
"bakedclay:natural",
"bakedclay:white",
"bakedclay:grey",
"bakedclay:black",
"bakedclay:red",
"bakedclay:yellow",
"bakedclay:green",
"bakedclay:cyan",
"bakedclay:blue",
"bakedclay:magenta",
"bakedclay:orange",
"bakedclay:violet",
"bakedclay:brown",
"bakedclay:pink",
"bakedclay:dark_grey",
"bakedclay:dark_green",
6,
},
terracotta = {
"bakedclay:terracotta_white",
"bakedclay:terracotta_grey",
"bakedclay:terracotta_black",
"bakedclay:terracotta_red",
"bakedclay:terracotta_yellow",
"bakedclay:terracotta_green",
"bakedclay:terracotta_cyan",
"bakedclay:terracotta_blue",
"bakedclay:terracotta_magenta",
"bakedclay:terracotta_orange",
"bakedclay:terracotta_violet",
"bakedclay:terracotta_brown",
"bakedclay:terracotta_pink",
"bakedclay:terracotta_dark_grey",
"bakedclay:terracotta_dark_green",
10,
},
},
food = {
bread = {
"farming:bread",
2,
},
fruit = {
"default:apple",
"default:blueberries",
"ethereal:banana",
"ethereal:orange",
"ethereal:lemon",
"x_farming:melon_fruit",
"x_farming:pumpkin_fruit",
"x_farming:kiwi_fruit",
"x_farming:cactus_fruit_item",
2,
},
},
}
--[[
Apply loot groups
]]
lootchests.add_to_loot_table("lootchests_default:ocean_chest",{
loot_groups.marinara.seashells,
loot_groups.animalia.leather,
loot_groups.bakedclay.terracotta,
})
lootchests.add_to_loot_table("lootchests_default:basket",{
loot_groups.x_farming.seeds,
loot_groups.x_farming.surface_crops,
loot_groups.x_farming.rope,
loot_groups.flowers.all_flowers,
loot_groups.flowers.all_flowers, -- 2x chance for flowers
loot_groups.flowers.all_flowers, -- 3x chance for flowers
loot_groups.flowerpot.pot,
loot_groups.animalia.feather,
loot_groups.animalia.leather,
loot_groups.food.bread,
loot_groups.food.fruit,
loot_groups.ethereal.bowl,
loot_groups.flowers.brown_mushrooms,
})
lootchests.add_to_loot_table("lootchests_default:urn",{
loot_groups.too_many_stones.crystals,
loot_groups.too_many_stones.precious_stones,
loot_groups.too_many_stones.common_stones,
loot_groups.x_farming.underground_crops,
loot_groups.x_farming.rope,
loot_groups.flowerpot.pot,
loot_groups.bakedclay.clay,
loot_groups.ethereal.bowl,
})
lootchests.add_to_loot_table("lootchests_default:stone_chest",{
loot_groups.too_many_stones.glowing_stones,
loot_groups.too_many_stones.opal,
loot_groups.bakedclay.terracotta,
})

View file

@ -0,0 +1,9 @@
local items = {
{"bonemeal:bonemeal", 8},
{"bonemeal:mulch", 8},
{"bonemeal:fertiliser", 8},
{"bonemeal:bone", 4},
{"bonemeal:gelatin_powder", 8},
}
lootchests.add_to_loot_table("lootchests_default:basket", items)

View file

@ -0,0 +1,44 @@
local items = {}
for _,item in ipairs({
{"farming:seed_wheat", 4},
{"farming:tomato", 2},
{"farming:rye", 4},
{"farming:oat", 4},
{"farming:rice", 4},
{"farming:rhubarb", 2},
{"farming:raspberries", 4},
{"farming:pumpkin", 1},
{"farming:potato", 4},
{"farming:pineapple", 2},
{"farming:peppercorn", 4},
{"farming:pepper", 4},
{"farming:pea_pod", 4},
{"farming:peas", 8},
{"farming:onion", 4},
{"farming:melon", 1},
{"farming:seed_hemp", 4},
{"farming:hemp_leaf", 8},
{"farming:hemp_rope", 4},
{"farming:grapes", 6},
{"farming:garlic_clove", 2},
{"farming:garlic", 4},
{"farming:cucumber", 2},
{"farming:seed_cotton", 4},
{"farming:corn", 8},
{"farming:coffee_beans", 8},
{"farming:cocoa_beans", 8},
{"farming:chili_pepper", 2},
{"farming:carrot", 4},
{"farming:blueberries", 8},
{"farming:beetroot", 8},
{"farming:beans", 8},
{"farming:seed_barley", 4},
{"farming:barley", 8},
}) do
if minetest.registered_items[item[1]] then
table.insert(items,item)
end
end
lootchests.add_to_loot_table("lootchests_default:basket", items)

View file

@ -0,0 +1,28 @@
local chest_items = {
{"gadgets_consumables:potion_speed_01", 2},
{"gadgets_consumables:potion_jump_01", 2},
{"gadgets_consumables:potion_gravity_01", 2},
{"gadgets_consumables:potion_dispel", 2},
{"gadgets_consumables:potion_health_regen_01", 2},
{"gadgets_consumables:potion_water_breath_01", 2},
{"gadgets_consumables:water_bottle", 2},
}
local stone_chest_items = {
{"gadgets_consumables:potion_teleport", 2},
{"gadgets_consumables:potion_fire_shield_02", 2},
{"gadgets_consumables:potion_speed_02", 2},
{"gadgets_consumables:potion_jump_02", 2},
{"gadgets_consumables:potion_gravity_02", 2},
{"gadgets_consumables:potion_dispel", 2},
{"gadgets_consumables:potion_health_regen_02", 2},
{"gadgets_consumables:potion_water_breath_02", 2},
}
lootchests.add_to_loot_table("lootchests_default:ocean_chest", chest_items)
lootchests.add_to_loot_table("lootchests_default:stone_chest", stone_chest_items)
if minetest.get_modpath("lootchests_magic_materials") then
lootchests.add_to_loot_table("lootchests_magic_materials:rune_urn", chest_items)
lootchests.add_to_loot_table("lootchests_magic_materials:rune_chest", stone_chest_items)
end

View file

@ -0,0 +1,29 @@
local chest_items = {
{"moreores:silver_ingot", 8},
{"moreores:mithril_lump", 2},
{"moreores:sword_silver"},
{"moreores:axe_silver"},
{"moreores:shovel_silver"},
{"moreores:pick_silver"},
}
local urn_items = {
{"moreores:silver_lump", 8},
}
local stone_chest_items = {
{"moreores:sword_silver"},
{"moreores:axe_silver"},
{"moreores:shovel_silver"},
{"moreores:pick_silver"},
{"moreores:sword_mithril"},
{"moreores:axe_mithril"},
{"moreores:shovel_mithril"},
{"moreores:pick_mithril"},
{"moreores:mithril_ingot", 4},
{"moreores:silver_block", 2},
}
lootchests.add_to_loot_table("lootchests_default:ocean_chest", chest_items)
lootchests.add_to_loot_table("lootchests_default:urn", urn_items)
lootchests.add_to_loot_table("lootchests_default:stone_chest", stone_chest_items)

View file

@ -0,0 +1,28 @@
local items = {
{"moretrees:acorn", 8},
{"moretrees:acorn_muffin_batter", 4},
{"moretrees:cedar_nuts", 16},
{"moretrees:cedar_cone", 4},
{"moretrees:coconut", 2},
{"moretrees:date", 16},
{"moretrees:date_nut_batter", 4},
{"moretrees:fir_cone", 4},
{"moretrees:fir_nuts", 8},
{"moretrees:spruce_cone", 4},
{"moretrees:spruce_nuts", 8},
{"moretrees:rubber_tree_sapling", 2},
{"moretrees:sequoia_sapling", 2},
{"moretrees:spruce_sapling", 2},
{"moretrees:willow_sapling", 2},
{"moretrees:poplar_sapling", 2},
{"moretrees:palm_sapling", 2},
{"moretrees:oak_sapling", 2},
{"moretrees:fir_sapling", 2},
{"moretrees:date_palm_sapling", 2},
{"moretrees:apple_tree_sapling", 2},
{"moretrees:birch_sapling", 2},
{"moretrees:cedar_sapling", 2},
{"moretrees:beech_sapling", 2},
}
lootchests.add_to_loot_table("lootchests_default:basket", items)

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1 @@