forked from Mineclonia/Mineclonia
Compare commits
19 Commits
formspec-u
...
issue-temp
Author | SHA1 | Date |
---|---|---|
E | 538e3b7e35 | |
E | 42205639f6 | |
E | dd8bcaec50 | |
E | 4dd1b00a0a | |
E | 32c7fe4741 | |
E | c9c568847c | |
E | 838bf0034f | |
E | 7f9ad443ac | |
E | 1738d57a2c | |
E | 438e91d212 | |
E | 9875183a6f | |
E | 95af8196a2 | |
Elias Åström | f3b0285347 | |
Elias Åström | 4c61fc80c6 | |
Elias Åström | 7ea25ab172 | |
Elias Åström | d9bbf4879c | |
My favourite Minetest cheat clients are Dragonfire and Waspsaliva. | a9d4a85e9a | |
Nils Dagsson Moskopp | ee9f49b86e | |
Elias Åström | 74d4986d1d |
|
@ -0,0 +1,38 @@
|
|||
---
|
||||
|
||||
name: "Bug Report"
|
||||
about: "Use this for when something's broken."
|
||||
labels:
|
||||
- bug
|
||||
- unconfirmed
|
||||
|
||||
---
|
||||
|
||||
##### What happened?
|
||||
|
||||
<!-- Describe what's wrong. -->
|
||||
|
||||
##### What did I expect?
|
||||
|
||||
<!-- Describe what should be happening instead -->
|
||||
|
||||
##### How to get it to happen
|
||||
|
||||
<!--
|
||||
Write down exactly what you did to get the bug to happen
|
||||
If you need more steps, just keep adding numbers. If you
|
||||
don't need them all, delete the empty numbers.
|
||||
-->
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
##### Environment
|
||||
|
||||
Mineclonia Version: <!-- Paste the version of Mineclonia here, if you know it. -->
|
||||
|
||||
<!--
|
||||
Please refer to https://git.minetest.land/Mineclonia/Mineclonia/wiki/Reporting-Bugs
|
||||
if you need help finding your Minetest version.
|
||||
-->
|
||||
Minetest Version:
|
|
@ -0,0 +1,22 @@
|
|||
---
|
||||
|
||||
name: "Feature Request"
|
||||
about: "Mineclonia doesn't do something you need it to"
|
||||
labels:
|
||||
- "feature request"
|
||||
|
||||
---
|
||||
|
||||
##### Problem
|
||||
|
||||
<!--
|
||||
Describe what's wrong.
|
||||
|
||||
If you're reporting a missing feature from Minecraft,
|
||||
please include a link to the Minetest wiki or Mojang bug
|
||||
tracker entry describing that feature.
|
||||
-->
|
||||
|
||||
##### Solution
|
||||
|
||||
<!-- Write down an example of what you'd like to happen. -->
|
|
@ -0,0 +1,51 @@
|
|||
<!--
|
||||
Please include the main mod this PR affects in the title, including
|
||||
the leading directory. For example, if you have added a new
|
||||
type of banner to mcl_banners, the title should look like:
|
||||
|
||||
items/mcl_banners: add new banner type
|
||||
|
||||
-->
|
||||
##### Problem
|
||||
TRACKING ISSUE: #<!-- Tracking issue number -->
|
||||
|
||||
<!--
|
||||
Describe WHAT problem this pull request solves.
|
||||
If the tracking issue includes all the needed
|
||||
information, you can leave this section empty.
|
||||
-->
|
||||
|
||||
##### Solution
|
||||
|
||||
<!-- Describe HOW this pull request solves its problem. -->
|
||||
|
||||
##### Details
|
||||
|
||||
<!-- Include any additional information here. -->
|
||||
|
||||
##### Testing Steps
|
||||
|
||||
<!--
|
||||
Write how we can verify this patch addresses its problem.
|
||||
If you need more steps, just keep adding numbers. If you
|
||||
don't need them all, delete the empty numbers.
|
||||
-->
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
<!--
|
||||
If your pull request still needs work, uncomment the
|
||||
following section and include a list of things that
|
||||
need to be done before it's ready for us to look at.
|
||||
|
||||
Please remember to put WIP: in front of the title as well.
|
||||
-->
|
||||
|
||||
<!--
|
||||
##### To do
|
||||
|
||||
- [ ] Item 1
|
||||
- [ ] Item 2
|
||||
- [ ] Item 3
|
||||
-->
|
|
@ -57,46 +57,44 @@ local function compute_sphere_rays(radius)
|
|||
local rays = {}
|
||||
local sphere = {}
|
||||
|
||||
for i=1, 2 do
|
||||
local function add_ray(pos)
|
||||
sphere[minetest.hash_node_position(pos)] = pos
|
||||
end
|
||||
|
||||
for y = -radius, radius do
|
||||
for z = -radius, radius do
|
||||
for x = -radius, 0 do
|
||||
local d = x * x + y * y + z * z
|
||||
if d <= radius * radius then
|
||||
add_ray(vector.new(x, y, z))
|
||||
add_ray(vector.new(-x, y, z))
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for x = -radius, radius do
|
||||
for z = -radius, radius do
|
||||
for y = -radius, 0 do
|
||||
local d = x * x + y * y + z * z
|
||||
if d <= radius * radius then
|
||||
add_ray(vector.new(x, y, z))
|
||||
add_ray(vector.new(x, -y, z))
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for x = -radius, radius do
|
||||
for y = -radius, radius do
|
||||
for z = -radius, radius do
|
||||
for x = -radius, 0, 1 do
|
||||
local d = x * x + y * y + z * z
|
||||
if d <= radius * radius then
|
||||
local pos = { x = x, y = y, z = z }
|
||||
sphere[minetest.hash_node_position(pos)] = pos
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for i=1,2 do
|
||||
for x = -radius, radius do
|
||||
for z = -radius, radius do
|
||||
for y = -radius, 0, 1 do
|
||||
local d = x * x + y * y + z * z
|
||||
if d <= radius * radius then
|
||||
local pos = { x = x, y = y, z = z }
|
||||
sphere[minetest.hash_node_position(pos)] = pos
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for i=1,2 do
|
||||
for x = -radius, radius do
|
||||
for y = -radius, radius do
|
||||
for z = -radius, 0, 1 do
|
||||
local d = x * x + y * y + z * z
|
||||
if d <= radius * radius then
|
||||
local pos = { x = x, y = y, z = z }
|
||||
sphere[minetest.hash_node_position(pos)] = pos
|
||||
break
|
||||
end
|
||||
for z = -radius, 0 do
|
||||
local d = x * x + y * y + z * z
|
||||
if d <= radius * radius then
|
||||
add_ray(vector.new(x, y, z))
|
||||
add_ray(vector.new(x, y, -z))
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -253,12 +251,12 @@ local function trace_explode(pos, strength, raydirs, radius, info, puncher)
|
|||
|
||||
if collisionbox then
|
||||
-- Create rays from random points in the collision box
|
||||
local x1 = collisionbox[1] * 2
|
||||
local y1 = collisionbox[2] * 2
|
||||
local z1 = collisionbox[3] * 2
|
||||
local x2 = collisionbox[4] * 2
|
||||
local y2 = collisionbox[5] * 2
|
||||
local z2 = collisionbox[6] * 2
|
||||
local x1 = collisionbox[1]
|
||||
local y1 = collisionbox[2]
|
||||
local z1 = collisionbox[3]
|
||||
local x2 = collisionbox[4]
|
||||
local y2 = collisionbox[5]
|
||||
local z2 = collisionbox[6]
|
||||
local x_len = math.abs(x2 - x1)
|
||||
local y_len = math.abs(y2 - y1)
|
||||
local z_len = math.abs(z2 - z1)
|
||||
|
|
|
@ -9,31 +9,3 @@ function mcl_formspec.get_itemslot_bg(x, y, w, h)
|
|||
end
|
||||
return out
|
||||
end
|
||||
|
||||
-- From the Minetest Lua API doc, "Migrating to Real Coordinates"
|
||||
local padding, spacing = 3/8, 5/4
|
||||
|
||||
function mcl_formspec.size2r(w, h)
|
||||
return (((w-1)*spacing) + (padding*2) + 1)..","..(((h-1)*spacing) + (padding*2) + 1)
|
||||
end
|
||||
|
||||
local function i2r(i)
|
||||
return (i*spacing)+padding
|
||||
end
|
||||
mcl_formspec.i2r=i2r
|
||||
|
||||
function mcl_formspec.xy2r(x, y)
|
||||
return i2r(x)..","..i2r(y)
|
||||
end
|
||||
|
||||
function mcl_formspec.get_itemslot_bgv2(x, y, w, h)
|
||||
local out = ""
|
||||
x=i2r(x)-padding
|
||||
y=i2r(y)-padding
|
||||
for i = 0, w - 1, 1 do
|
||||
for j = 0, h - 1, 1 do
|
||||
out = out .."image["..x+i2r(i)..","..y+i2r(j)..";1,1;mcl_formspec_itemslot.png]"
|
||||
end
|
||||
end
|
||||
return out
|
||||
end
|
||||
|
|
|
@ -144,47 +144,6 @@ local on_destruct_hanging_banner = function(pos)
|
|||
return on_destruct_banner(pos, true)
|
||||
end
|
||||
|
||||
local function escape(text)
|
||||
return text:gsub("%^", "\\%^"):gsub(":", "\\:") -- :gsub("%(", "\\%("):gsub("%)", "\\%)")
|
||||
end
|
||||
|
||||
local make_banner_overlay = function(base_color, layers)
|
||||
local colorize = mcl_banners.colors[base_color][4]
|
||||
-- Base texture with base color
|
||||
local base = "(mcl_banners_item_base.png^(mcl_banners_item_overlay.png^[colorize:"..colorize..":"..base_color_ratio..")^[resize:32x32)"
|
||||
|
||||
-- Optional pattern layers
|
||||
if layers then
|
||||
local lovl = ""
|
||||
for l=1, #layers do
|
||||
local layerinfo = layers[l]
|
||||
local pattern = "mcl_banners_" .. layerinfo.pattern .. ".png"
|
||||
local color = mcl_banners.colors[layerinfo.color][4]
|
||||
|
||||
-- Generate layer texture
|
||||
local layer = "((("..pattern.."^[mask:mcl_banners_front.png)^[colorize:"..color..":"..layer_ratio..")^[mask:"..pattern..")"
|
||||
|
||||
lovl = (lovl ~= "" and (lovl .. "^") or "") .. layer
|
||||
end
|
||||
|
||||
return "[combine:32x32:0,0=" .. escape(base) .. ":7,3=" .. escape("("..lovl.."^[resize:50x38)")
|
||||
end
|
||||
return base
|
||||
end
|
||||
|
||||
function mcl_banners.get_overlay(istk)
|
||||
local imeta = istk:get_meta()
|
||||
local layers_raw = imeta:get_string("layers")
|
||||
if not layers_raw or layers_raw == "" then
|
||||
return
|
||||
end
|
||||
local basec = imeta:get("fake_base") or istk:get_definition()._base_color
|
||||
if not basec then
|
||||
basec="unicolor_white"
|
||||
end
|
||||
return make_banner_overlay(basec, minetest.deserialize(layers_raw))
|
||||
end
|
||||
|
||||
local make_banner_texture = function(base_color, layers)
|
||||
local colorize
|
||||
if mcl_banners.colors[base_color] then
|
||||
|
@ -430,6 +389,10 @@ for colorid, colortab in pairs(mcl_banners.colors) do
|
|||
|
||||
local layer = "(([combine:20x40:-2,-2="..pattern.."^[resize:16x24^[colorize:"..color..":"..layer_ratio.."))"
|
||||
|
||||
function escape(text)
|
||||
return text:gsub("%^", "\\%^"):gsub(":", "\\:") -- :gsub("%(", "\\%("):gsub("%)", "\\%)")
|
||||
end
|
||||
|
||||
finished_banner = "[combine:32x32:0,0=" .. escape(base) .. ":8,4=" .. escape(layer)
|
||||
end
|
||||
|
||||
|
@ -457,7 +420,6 @@ for colorid, colortab in pairs(mcl_banners.colors) do
|
|||
groups = groups,
|
||||
stack_max = 16,
|
||||
|
||||
_base_color=colorid,
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
local above = pointed_thing.above
|
||||
local under = pointed_thing.under
|
||||
|
@ -606,7 +568,7 @@ for colorid, colortab in pairs(mcl_banners.colors) do
|
|||
end,
|
||||
})
|
||||
|
||||
if minetest.get_modpath("mcl_core") and minetest.get_modpath("mcl_wool") then
|
||||
if minetest.get_modpath("mcl_core") and minetest.get_modpath("mcl_wool") and pattern_name == "" then
|
||||
minetest.register_craft({
|
||||
output = itemstring,
|
||||
recipe = {
|
||||
|
|
|
@ -485,12 +485,11 @@ local banner_pattern_craft = function(itemstack, player, old_craft_grid, craft_i
|
|||
|
||||
local imeta = itemstack:get_meta()
|
||||
imeta:set_string("layers", minetest.serialize(layers))
|
||||
local idef=itemstack:get_definition()
|
||||
|
||||
local mname = ometa:get_string("name")
|
||||
-- Only change description if banner does not have a name
|
||||
if mname == "" then
|
||||
local odesc = idef.description
|
||||
local odesc = itemstack:get_definition().description
|
||||
local description = mcl_banners.make_advanced_banner_description(odesc, layers)
|
||||
imeta:set_string("description", description)
|
||||
else
|
||||
|
@ -501,13 +500,10 @@ local banner_pattern_craft = function(itemstack, player, old_craft_grid, craft_i
|
|||
if craft_predict then
|
||||
local itemid_prefix = "mcl_banners:banner_preview"
|
||||
local coloritemid = dye_to_itemid_mapping[dye]
|
||||
local is=ItemStack(itemid_prefix .. "_" .. matching_pattern .. "_" .. coloritemid)
|
||||
local im=is:get_meta()
|
||||
im:from_table(imeta:to_table())
|
||||
im:set_string("fake_base", idef._base_color)
|
||||
return is
|
||||
return ItemStack(itemid_prefix .. "_" .. matching_pattern .. "_" .. coloritemid)
|
||||
else
|
||||
return itemstack
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
|
||||
minetest.register_craft_predict(function(itemstack, player, old_craft_grid, craft_inv)
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 5.2 KiB |
|
@ -0,0 +1,3 @@
|
|||
mcl_init
|
||||
mcl_formspec
|
||||
mcl_sounds
|
|
@ -0,0 +1 @@
|
|||
Adds a crafting table.
|
|
@ -1,92 +1,57 @@
|
|||
local S = minetest.get_translator("mcl_crafting_table")
|
||||
local formspec_escape = minetest.formspec_escape
|
||||
local show_formspec = minetest.show_formspec
|
||||
local C = minetest.colorize
|
||||
local text_color = "#313131"
|
||||
local itemslot_bg = mcl_formspec.get_itemslot_bg
|
||||
|
||||
mcl_crafting_table = {
|
||||
last_table={}
|
||||
}
|
||||
function mcl_crafting_table.show_crafting_form(player, overlay)
|
||||
player:get_inventory():set_width("craft", 3)
|
||||
player:get_inventory():set_size("craft", 9)
|
||||
|
||||
show_formspec(player:get_player_name(), "mcl_crafting_table:main",
|
||||
"size[9,8.75]"..
|
||||
"image[4.7,1.5;1.5,1;gui_crafting_arrow.png]"..
|
||||
"label[0,4;"..formspec_escape(C(text_color, S("Inventory"))).."]".. --"#313131"
|
||||
"list[current_player;main;0,4.5;9,3;9]"..
|
||||
itemslot_bg(0,4.5,9,3)..
|
||||
"list[current_player;main;0,7.74;9,1;]"..
|
||||
itemslot_bg(0,7.74,9,1)..
|
||||
"label[1.75,0;"..formspec_escape(C(text_color, S("Crafting"))).."]"..
|
||||
"list[current_player;craft;1.75,0.5;3,3;]"..
|
||||
itemslot_bg(1.75,0.5,3,3)..
|
||||
"list[current_player;craftpreview;6.1,1.5;1,1;]"..
|
||||
itemslot_bg(6.1,1.5,1,1)..
|
||||
"image_button[0.75,1.5;1,1;craftguide_book.png;__mcl_craftguide;]"..
|
||||
"tooltip[__mcl_craftguide;"..formspec_escape(S("Recipe book")).."]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[current_player;craft]"..
|
||||
(overlay and "image[7.1,1.5;1,1;"..formspec_escape(overlay).."]" or "")
|
||||
-- The overlay can be scooted back over top of the craftpreview once this formspec is
|
||||
-- updated to version 3.
|
||||
)
|
||||
end
|
||||
|
||||
if minetest.get_modpath("mcl_banners") then
|
||||
minetest.register_craft_predict(function(itemstack, player, old_craft_grid, craft_inv)
|
||||
if mcl_crafting_table.last_table[player:get_player_name()] then
|
||||
local ovl=mcl_banners.get_overlay(itemstack)
|
||||
mcl_crafting_table.show_crafting_form(player, ovl)
|
||||
end
|
||||
end)
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= "mcl_crafting_table:main" then
|
||||
return false
|
||||
end
|
||||
if fields["quit"] then
|
||||
mcl_crafting_table.last_table[player:get_player_name()]=nil
|
||||
minetest.close_formspec(player:get_player_name(), formname)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
local show_crafting_form = mcl_crafting_table.show_crafting_form --cache function for better performances
|
||||
minetest.register_node("mcl_crafting_table:crafting_table", {
|
||||
description = S("Crafting Table"),
|
||||
_tt_help = S("3×3 crafting grid"),
|
||||
_doc_items_longdesc = S("A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts."),
|
||||
_doc_items_usagehelp = S("Rightclick the crafting table to access the 3×3 crafting grid."),
|
||||
_doc_items_hidden = false,
|
||||
is_ground_content = false,
|
||||
tiles = {"crafting_workbench_top.png", "default_wood.png", "crafting_workbench_side.png",
|
||||
"crafting_workbench_side.png", "crafting_workbench_front.png", "crafting_workbench_front.png"},
|
||||
paramtype2 = "facedir",
|
||||
groups = {handy=1,axey=1, deco_block=1, material_wood=1,flammable=-1},
|
||||
on_rightclick = function(pos, node, player, itemstack)
|
||||
mcl_crafting_table.last_table[player:get_player_name()]=node
|
||||
show_crafting_form(player)
|
||||
end,
|
||||
sounds = mcl_sounds.node_sound_wood_defaults(),
|
||||
_mcl_blast_resistance = 2.5,
|
||||
_mcl_hardness = 2.5,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_crafting_table:crafting_table",
|
||||
recipe = {
|
||||
{"group:wood", "group:wood"},
|
||||
{"group:wood", "group:wood"}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "mcl_crafting_table:crafting_table",
|
||||
burntime = 15,
|
||||
})
|
||||
|
||||
minetest.register_alias("crafting:workbench", "mcl_crafting_table:crafting_table")
|
||||
minetest.register_alias("mcl_inventory:workbench", "mcl_crafting_table:crafting_table")
|
||||
local S = minetest.get_translator("mcl_crafting_table")
|
||||
|
||||
minetest.register_node("mcl_crafting_table:crafting_table", {
|
||||
description = S("Crafting Table"),
|
||||
_tt_help = S("3×3 crafting grid"),
|
||||
_doc_items_longdesc = S("A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts."),
|
||||
_doc_items_usagehelp = S("Rightclick the crafting table to access the 3×3 crafting grid."),
|
||||
_doc_items_hidden = false,
|
||||
is_ground_content = false,
|
||||
tiles = {"crafting_workbench_top.png", "default_wood.png", "crafting_workbench_side.png",
|
||||
"crafting_workbench_side.png", "crafting_workbench_front.png", "crafting_workbench_front.png"},
|
||||
paramtype2 = "facedir",
|
||||
groups = {handy=1,axey=1, deco_block=1, material_wood=1,flammable=-1},
|
||||
on_rightclick = function(pos, node, player, itemstack)
|
||||
player:get_inventory():set_width("craft", 3)
|
||||
player:get_inventory():set_size("craft", 9)
|
||||
|
||||
local form = "size[9,8.75]"..
|
||||
"image[4.7,1.5;1.5,1;gui_crafting_arrow.png]"..
|
||||
"label[0,4;"..minetest.formspec_escape(minetest.colorize("#313131", S("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[1.75,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Crafting"))).."]"..
|
||||
"list[current_player;craft;1.75,0.5;3,3;]"..
|
||||
mcl_formspec.get_itemslot_bg(1.75,0.5,3,3)..
|
||||
"list[current_player;craftpreview;6.1,1.5;1,1;]"..
|
||||
mcl_formspec.get_itemslot_bg(6.1,1.5,1,1)..
|
||||
"image_button[0.75,1.5;1,1;craftguide_book.png;__mcl_craftguide;]"..
|
||||
"tooltip[__mcl_craftguide;"..minetest.formspec_escape(S("Recipe book")).."]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[current_player;craft]"
|
||||
|
||||
minetest.show_formspec(player:get_player_name(), "main", form)
|
||||
end,
|
||||
sounds = mcl_sounds.node_sound_wood_defaults(),
|
||||
_mcl_blast_resistance = 2.5,
|
||||
_mcl_hardness = 2.5,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_crafting_table:crafting_table",
|
||||
recipe = {
|
||||
{"group:wood", "group:wood"},
|
||||
{"group:wood", "group:wood"}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "mcl_crafting_table:crafting_table",
|
||||
burntime = 15,
|
||||
})
|
||||
|
||||
minetest.register_alias("crafting:workbench", "mcl_crafting_table:crafting_table")
|
||||
minetest.register_alias("mcl_inventory:workbench", "mcl_crafting_table:crafting_table")
|
||||
|
|
|
@ -1,4 +1 @@
|
|||
name = mcl_crafting_table
|
||||
description = Adds a crafting table.
|
||||
depends = mcl_init, mcl_formspec, mcl_sounds
|
||||
optional_depends = mcl_banners
|
||||
|
|
Loading…
Reference in New Issue