1
0
mirror of https://github.com/pandorabox-io/banners.git synced 2025-06-30 07:11:06 +02:00

Limit texture size (#6)

* whitespace and minetest. -> core.

- use same whitespace style throughout and fix some indents.
- change from minetest. to core. namespace.

* Update Readme: Minetest -> Luanti

* add luacheck

* update optional depends

* luacheck cleanups

- unused arguments
- shaddowed vars
- var redeclarations
- some whitespace involved in above lines

* clean close of file after reading

* avoid duplicate code

save some lines and some extra method calls.

* avoid error: "unknown global"

* stray whitespace fixups

* whitespace: switch all files to same indent character

tabs -> spaces

* refactor weird declaration

* whitespace: two stray spaces

...that slipped through the cracks on previous whitespace edit

* fix shaddowing global table

* reduce amount of times transformation string is calculated

* use ipairs feature

or use the faster repeat-until-loop

* cap max amount of layers

fixes #5

* fix #5 make transform history non-global

fixes #5
transformation history was shared by all users and kept growing as it
was never truely reset. Every time a user
used a banner a white background was dumped on top of the
stack making it possible to crash the server through an
overflow to core.serialize() function.

* minimize metadata size

also changed banners.max_transformations to
banners.max_undo_levels and lowered the value substantially.

* add versioning

* add recoverable per player history with saved colour

* rename update_all -> update_preview_inv

since it isn't updating everything, only
the preview and the inventory item

* dynamically update masks

to reflect the currently selected colour.
This commit is contained in:
Luke aka SwissalpS
2024-11-29 10:45:55 +01:00
committed by GitHub
parent 283b5bec25
commit 8cc1c82717
10 changed files with 1105 additions and 1039 deletions

View File

@ -1,43 +1,43 @@
banners.power_per_banner = 10.
-- items
minetest.register_craftitem("banners:golden_finial", {
core.register_craftitem("banners:golden_finial", {
groups = {},
description = "Golden finial",
inventory_image = "gold_finial.png",
})
minetest.register_craftitem("banners:silver_pole", {
core.register_craftitem("banners:silver_pole", {
groups = {},
description = "Silver pole",
inventory_image = "silver_pole.png"
})
minetest.register_craftitem("banners:power_pole", {
core.register_craftitem("banners:power_pole", {
groups = {},
description = "Power pole",
inventory_image = "power_pole.png"
})
minetest.register_craftitem("banners:golden_sheet", {
core.register_craftitem("banners:golden_sheet", {
groups = {},
description = "Golden sheet",
inventory_image = "golden_sheet.png"
})
minetest.register_craftitem("banners:death_pole", {
core.register_craftitem("banners:death_pole", {
groups = {},
description = "Death pole",
inventory_image = "death_pole.png"
})
minetest.register_craftitem("banners:death_sheet", {
core.register_craftitem("banners:death_sheet", {
groups = {},
description = "Death sheet",
inventory_image = "death_sheet.png"
})
minetest.register_craftitem("banners:death_base", {
core.register_craftitem("banners:death_base", {
groups = {},
description = "Death base",
inventory_image = "death_base.png"
@ -46,107 +46,98 @@ minetest.register_craftitem("banners:death_base", {
-- crafts
minetest.register_craft( -- silver flag pole
{
output = "banners:silver_pole 1",
recipe = {
{"", "", "moreores:silver_ingot"},
{"", "moreores:silver_ingot", ""},
{"moreores:silver_ingot", "", ""}
}
-- silver flag pole
core.register_craft({
output = "banners:silver_pole 1",
recipe = {
{ "", "", "moreores:silver_ingot" },
{ "", "moreores:silver_ingot", "" },
{ "moreores:silver_ingot", "", "" }
}
)
})
minetest.register_craft( -- death flag pole
{
output = "banners:death_pole 1",
recipe = {
{"", "", "default:diamond"},
{"", "default:obsidian", ""},
{"default:obsidian", "", ""}
}
-- death flag pole
core.register_craft({
output = "banners:death_pole 1",
recipe = {
{ "", "", "default:diamond" },
{ "", "default:obsidian", "" },
{ "default:obsidian", "", "" }
}
)
})
minetest.register_craft( -- golden finial
{
output = "banners:golden_finial",
recipe = {
{"", "default:gold_ingot", "default:gold_ingot"},
{"", "default:gold_ingot", "default:gold_ingot"},
{"default:gold_ingot", "", ""}
}
-- golden finial
core.register_craft({
output = "banners:golden_finial",
recipe = {
{ "", "default:gold_ingot", "default:gold_ingot" },
{ "", "default:gold_ingot", "default:gold_ingot" },
{ "default:gold_ingot", "", "" }
}
)
})
minetest.register_craft( -- power flag pole
{
output = "banners:power_pole 1",
recipe = {
{"", "", ""},
{"", "banners:golden_finial", ""},
{"banners:silver_pole", "", ""}
}
-- power flag pole
core.register_craft({
output = "banners:power_pole 1",
recipe = {
{ "", "", "" },
{ "", "banners:golden_finial", "" },
{ "banners:silver_pole", "", "" }
}
)
})
minetest.register_craft( -- golden sheet
{
output = "banners:golden_sheet 1",
type = "shapeless",
recipe = { "default:gold_ingot", "banners:banner_sheet"}
}
)
-- golden sheet
core.register_craft({
output = "banners:golden_sheet 1",
type = "shapeless",
recipe = { "default:gold_ingot", "banners:banner_sheet" }
})
minetest.register_craft( -- death sheet
{
output = "banners:death_sheet 1",
type = "shapeless",
recipe = { "default:obsidian", "banners:banner_sheet"}
}
)
-- death sheet
core.register_craft({
output = "banners:death_sheet 1",
type = "shapeless",
recipe = { "default:obsidian", "banners:banner_sheet" }
})
minetest.register_craft( -- death sheet
{
output = "banners:death_base 1",
recipe = {
{"", "", ""},
{"", "banners:steel_base", ""},
{"default:obsidian", "default:obsidian", "default:obsidian"}
}
-- death sheet
core.register_craft({
output = "banners:death_base 1",
recipe = {
{ "", "", "" },
{ "", "banners:steel_base", "" },
{ "default:obsidian", "default:obsidian", "default:obsidian" }
}
)
})
minetest.register_craft( -- power banner
{
output = "banners:power_banner",
recipe = {
{"", "banners:golden_sheet", ""},
{"", "banners:power_pole", ""},
{"", "banners:steel_base", ""}
}
-- power banner
core.register_craft({
output = "banners:power_banner",
recipe = {
{ "", "banners:golden_sheet", "" },
{ "", "banners:power_pole", "" },
{ "", "banners:steel_base", "" }
}
)
})
minetest.register_craft( -- death banner
{
output = "banners:death_banner",
recipe = {
{"", "banners:death_sheet", ""},
{"", "banners:death_pole", ""},
{"", "banners:death_base", ""}
}
-- death banner
core.register_craft({
output = "banners:death_banner",
recipe = {
{ "", "banners:death_sheet", "" },
{ "", "banners:death_pole", "" },
{ "", "banners:death_base", "" }
}
)
})
-- nodes
minetest.register_node("banners:power_banner", {
core.register_node("banners:power_banner", {
drawtype = "mesh",
mesh = "banner_support.x",
tiles = {"gold_support.png"},
tiles = { "gold_support.png" },
description = "Power Banner",
groups = {cracky=3},
groups = { cracky = 3 },
is_ground_content = false,
diggable = true,
stack_max = 1,
@ -154,15 +145,15 @@ minetest.register_node("banners:power_banner", {
paramtype2 = "facedir",
after_place_node = function (pos, player, itemstack, pointed_thing)
banners.after_powerbanner_placed(pos, player, itemstack, pointed_thing)
end,
end,
on_destruct = function(pos)
banners.banner_on_destruct(pos)
end,
on_dig = function(pos, n, p)
if minetest.is_protected(pos, p:get_player_name()) then
if core.is_protected(pos, p:get_player_name()) then
return
end
local meta = minetest.get_meta(pos)
local meta = core.get_meta(pos)
local facname = meta:get_string("faction")
if facname then
local faction = factions.factions[facname]
@ -174,12 +165,12 @@ minetest.register_node("banners:power_banner", {
end,
})
minetest.register_node("banners:death_banner", {
core.register_node("banners:death_banner", {
drawtype = "mesh",
mesh = "banner_support.x",
tiles = {"death_uv.png"},
tiles = { "death_uv.png" },
description = "Death Banner",
groups = {cracky=3},
groups = { cracky = 3 },
is_ground_content = false,
diggable = true,
stack_max = 1,
@ -187,15 +178,16 @@ minetest.register_node("banners:death_banner", {
paramtype2 = "facedir",
after_place_node = function (pos, player, itemstack, pointed_thing)
banners.after_deathbanner_placed(pos, player, itemstack, pointed_thing)
end,
end,
on_destruct = function(pos)
banners.banner_on_destruct(pos)
end,
on_dig = function(pos, n, p)
if minetest.is_protected(pos, p:get_player_name()) then
-- (pos, node, player)
on_dig = function(pos, _, player)
if core.is_protected(pos, player:get_player_name()) then
return
end
local meta = minetest.get_meta(pos)
local meta = core.get_meta(pos)
local defending_facname = meta:get_string("faction")
local parcelpos = factions.get_parcel_pos(pos)
if defending_facname then
@ -204,34 +196,36 @@ minetest.register_node("banners:death_banner", {
faction:stop_attack(parcelpos)
end
end
minetest.remove_node(pos)
core.remove_node(pos)
end,
})
banners.after_powerbanner_placed = function(pos, player, itemstack, pointed_thing)
minetest.get_node(pos).param2 = banners.determine_flag_direction(pos, pointed_thing)
-- (pos, player, itemstack, pointed_thing)
banners.after_powerbanner_placed = function(pos, player, _, pointed_thing)
core.get_node(pos).param2 = banners.determine_flag_direction(pos, pointed_thing)
local faction = factions.players[player:get_player_name()]
if not faction then
minetest.get_meta(pos):set_string("banner", "bg_white.png")
core.get_meta(pos):set_string("banner", "bg_white.png")
else
local banner_string = factions.factions[faction].banner
minetest.get_meta(pos):set_string("banner", banner_string)
minetest.get_meta(pos):set_string("faction", faction)
core.get_meta(pos):set_string("banner", banner_string)
core.get_meta(pos):set_string("faction", faction)
factions.factions[faction]:increase_maxpower(banners.power_per_banner)
end
minetest.add_entity(pos, "banners:banner_ent")
core.add_entity(pos, "banners:banner_ent")
end
banners.after_deathbanner_placed = function(pos, player, itemstack, pointed_thing)
minetest.get_node(pos).param2 = banners.determine_flag_direction(pos, pointed_thing)
-- (pos, player, itemstack, pointed_thing)
banners.after_deathbanner_placed = function(pos, player, _, pointed_thing)
core.get_node(pos).param2 = banners.determine_flag_direction(pos, pointed_thing)
local attacking_faction = factions.players[player:get_player_name()]
if attacking_faction then
local parcelpos = factions.get_parcel_pos(pos)
attacking_faction = factions.factions[attacking_faction]
attacking_faction:attack_parcel(parcelpos)
minetest.get_meta(pos):set_string("faction", attacking_faction.name)
core.get_meta(pos):set_string("faction", attacking_faction.name)
end
minetest.get_meta(pos):set_string("banner", "death_uv.png")
minetest.add_entity(pos, "banners:banner_ent")
core.get_meta(pos):set_string("banner", "death_uv.png")
core.add_entity(pos, "banners:banner_ent")
end