mirror of
git://repo.or.cz/minetest_schemedit.git
synced 2025-07-04 17:10:24 +02:00
Compare commits
22 Commits
Author | SHA1 | Date | |
---|---|---|---|
5cf551dccd | |||
b8cbb66d83 | |||
a6cf015631 | |||
5aba3aada8 | |||
3c7c208dcb | |||
0fc0180a04 | |||
2c8e6fae3e | |||
cdcda91fd6 | |||
1d53577085 | |||
59cf898ddc | |||
02acad209b | |||
fee142eab2 | |||
9cb700327a | |||
476f62c286 | |||
d7363f470d | |||
713deec575 | |||
442329d886 | |||
f4470596dc | |||
27c0c2764c | |||
7797aa8de6 | |||
ab122a1692 | |||
16950a773d |
2
LICENSE
2
LICENSE
@ -1,5 +1,5 @@
|
||||
MIT License
|
||||
Copyright (c) 2017 Elijah Duffy
|
||||
Copyright (c) 2017-2020 Elijah Duffy and Wuzzy
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
associated documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
|
@ -1,16 +1,16 @@
|
||||
# Schematic Editor [`schemedit`]
|
||||
|
||||
## Version
|
||||
1.1.0
|
||||
1.2.0
|
||||
|
||||
## Description
|
||||
This is a mod which allows you to edit and export schematics (`.mts` files).
|
||||
|
||||
It supports node porbabilities, forced node placement and slice probabilities.
|
||||
It supports node probabilities, forced node placement and slice probabilities.
|
||||
|
||||
It adds 3 items:
|
||||
|
||||
* Schematic Creator: Used to mark a region and export it as schematic
|
||||
* Schematic Creator: Used to mark a region and export or import it as schematic
|
||||
* Schematic Void: Marks a position in a schematic which should not replace anything when placed as a schematic
|
||||
* Schematic Node Probability Tool: Set per-node probabilities and forced node placement
|
||||
|
||||
|
253
init.lua
253
init.lua
@ -15,6 +15,8 @@ local export_path_trunc = table.concat({S("<world path>"), "schems"}, DIR_DELIM)
|
||||
local text_color = "#D79E9E"
|
||||
local text_color_number = 0xD79E9E
|
||||
|
||||
local can_import = minetest.read_schematic ~= nil
|
||||
|
||||
schemedit.markers = {}
|
||||
|
||||
-- [local function] Renumber table
|
||||
@ -231,7 +233,10 @@ end
|
||||
---
|
||||
--- Formspec Tabs
|
||||
---
|
||||
|
||||
local import_btn = ""
|
||||
if can_import then
|
||||
import_btn = "button[0.5,2.5;6,1;import;"..F(S("Import schematic")).."]"
|
||||
end
|
||||
schemedit.add_form("main", {
|
||||
tab = true,
|
||||
caption = S("Main"),
|
||||
@ -247,23 +252,28 @@ schemedit.add_form("main", {
|
||||
border_button = "button[3.5,7.5;3,1;border;"..F(S("Show border")).."]"
|
||||
end
|
||||
|
||||
-- TODO: Show information regarding volume, pos1, pos2, etc... in formspec
|
||||
local xs, ys, zs = meta.x_size or 1, meta.y_size or 1, meta.z_size or 1
|
||||
local size = {x=xs, y=ys, z=zs}
|
||||
|
||||
local form = [[
|
||||
size[7,8]
|
||||
label[0.5,-0.1;]]..F(S("Position: @1", strpos))..[[]
|
||||
label[3,-0.1;]]..F(S("Owner: @1", name))..[[]
|
||||
label[0.5,0.4;]]..F(S("Schematic name: @1", meta.schem_name))..[[]
|
||||
label[0.5,0.9;]]..F(S("Size: @1", minetest.pos_to_string(size)))..[[]
|
||||
|
||||
field[0.8,1;5,1;name;]]..F(S("Schematic name:"))..[[;]]..F(meta.schem_name or "")..[[]
|
||||
button[5.3,0.69;1.2,1;save_name;]]..F(S("Save"))..[[]
|
||||
field[0.8,2;5,1;name;]]..F(S("Schematic name:"))..[[;]]..F(meta.schem_name or "")..[[]
|
||||
button[5.3,1.69;1.2,1;save_name;]]..F(S("OK"))..[[]
|
||||
tooltip[save_name;]]..F(S("Save schematic name"))..[[]
|
||||
field_close_on_enter[name;false]
|
||||
|
||||
button[0.5,1.5;6,1;export;]]..F(S("Export schematic"))..[[]
|
||||
textarea[0.8,2.5;6.2,5;;]]..F(S("The schematic will be exported as a .mts file and stored in\n@1",
|
||||
export_path_trunc .. DIR_DELIM .. "<name>.mts."))..[[;]
|
||||
field[0.8,7;2,1;x;]]..F(S("X size:"))..[[;]]..meta.x_size..[[]
|
||||
field[2.8,7;2,1;y;]]..F(S("Y size:"))..[[;]]..meta.y_size..[[]
|
||||
field[4.8,7;2,1;z;]]..F(S("Z size:"))..[[;]]..meta.z_size..[[]
|
||||
button[0.5,3.5;6,1;export;]]..F(S("Export schematic")).."]"..
|
||||
import_btn..[[
|
||||
textarea[0.8,4.5;6.2,5;;]]..F(S("Export/import path:\n@1",
|
||||
export_path_trunc .. DIR_DELIM .. F(S("<name>"))..".mts"))..[[;]
|
||||
field[0.8,7;2,1;x;]]..F(S("X size:"))..[[;]]..xs..[[]
|
||||
field[2.8,7;2,1;y;]]..F(S("Y size:"))..[[;]]..ys..[[]
|
||||
field[4.8,7;2,1;z;]]..F(S("Z size:"))..[[;]]..zs..[[]
|
||||
field_close_on_enter[x;false]
|
||||
field_close_on_enter[y;false]
|
||||
field_close_on_enter[z;false]
|
||||
@ -282,6 +292,31 @@ schemedit.add_form("main", {
|
||||
local meta = realmeta:to_table().fields
|
||||
local hashpos = minetest.hash_node_position(pos)
|
||||
|
||||
-- Save size vector values
|
||||
if (fields.x and fields.x ~= "") then
|
||||
local x = tonumber(fields.x)
|
||||
if x then
|
||||
meta.x_size = math.max(x, 1)
|
||||
end
|
||||
end
|
||||
if (fields.y and fields.y ~= "") then
|
||||
local y = tonumber(fields.y)
|
||||
if y then
|
||||
meta.y_size = math.max(y, 1)
|
||||
end
|
||||
end
|
||||
if (fields.z and fields.z ~= "") then
|
||||
local z = tonumber(fields.z)
|
||||
if z then
|
||||
meta.z_size = math.max(z, 1)
|
||||
end
|
||||
end
|
||||
|
||||
-- Save schematic name
|
||||
if fields.name then
|
||||
meta.schem_name = fields.name
|
||||
end
|
||||
|
||||
if fields.doc then
|
||||
doc.show_entry(name, "nodes", "schemedit:creator", true)
|
||||
return
|
||||
@ -298,30 +333,6 @@ schemedit.add_form("main", {
|
||||
end
|
||||
end
|
||||
|
||||
-- Save size vector values
|
||||
if (fields.save or fields.key_enter_field == "x" or
|
||||
fields.key_enter_field == "y" or fields.key_enter_field == "z")
|
||||
and (fields.x and fields.y and fields.z and fields.x ~= ""
|
||||
and fields.y ~= "" and fields.z ~= "") then
|
||||
local x, y, z = tonumber(fields.x), tonumber(fields.y), tonumber(fields.z)
|
||||
|
||||
if x then
|
||||
meta.x_size = math.max(x, 1)
|
||||
end
|
||||
if y then
|
||||
meta.y_size = math.max(y, 1)
|
||||
end
|
||||
if z then
|
||||
meta.z_size = math.max(z, 1)
|
||||
end
|
||||
end
|
||||
|
||||
-- Save schematic name
|
||||
if fields.save_name or fields.key_enter_field == "name" and fields.name and
|
||||
fields.name ~= "" then
|
||||
meta.schem_name = fields.name
|
||||
end
|
||||
|
||||
-- Export schematic
|
||||
if fields.export and meta.schem_name and meta.schem_name ~= "" then
|
||||
local pos1, pos2 = schemedit.size(pos)
|
||||
@ -364,6 +375,91 @@ schemedit.add_form("main", {
|
||||
end
|
||||
end
|
||||
|
||||
-- Import schematic
|
||||
if fields.import and meta.schem_name and meta.schem_name ~= "" then
|
||||
if not minetest.get_player_privs(name).debug then
|
||||
minetest.chat_send_player(name, minetest.colorize("red",
|
||||
S("Insufficient privileges! You need the “debug” privilege to do this.")))
|
||||
return
|
||||
end
|
||||
|
||||
if not can_import then
|
||||
return
|
||||
end
|
||||
local pos1
|
||||
local node = minetest.get_node(pos)
|
||||
local path = export_path_full .. DIR_DELIM
|
||||
|
||||
local filepath = path..meta.schem_name..".mts"
|
||||
local schematic = minetest.read_schematic(filepath, {write_yslice_prob="low"})
|
||||
local success = false
|
||||
|
||||
if schematic then
|
||||
meta.x_size = schematic.size.x
|
||||
meta.y_size = schematic.size.y
|
||||
meta.z_size = schematic.size.z
|
||||
meta.slices = minetest.serialize(schematic.yslice_prob)
|
||||
|
||||
if node.param2 == 1 then
|
||||
pos1 = vector.add(pos, {x=1,y=0,z=-meta.z_size+1})
|
||||
elseif node.param2 == 2 then
|
||||
pos1 = vector.add(pos, {x=-meta.x_size+1,y=0,z=-meta.z_size})
|
||||
elseif node.param2 == 3 then
|
||||
pos1 = vector.add(pos, {x=-meta.x_size,y=0,z=0})
|
||||
else
|
||||
pos1 = vector.add(pos, {x=0,y=0,z=1})
|
||||
end
|
||||
|
||||
local schematic_for_meta = table.copy(schematic)
|
||||
-- Strip probability data for placement
|
||||
schematic.yslice_prob = {}
|
||||
for d=1, #schematic.data do
|
||||
schematic.data[d].prob = nil
|
||||
end
|
||||
|
||||
-- Place schematic
|
||||
success = minetest.place_schematic(pos1, schematic, "0", nil, true)
|
||||
|
||||
-- Add special schematic data to nodes
|
||||
if success then
|
||||
local d = 1
|
||||
for z=0, meta.z_size-1 do
|
||||
for y=0, meta.y_size-1 do
|
||||
for x=0, meta.x_size-1 do
|
||||
local data = schematic_for_meta.data[d]
|
||||
local pp = {x=pos1.x+x, y=pos1.y+y, z=pos1.z+z}
|
||||
if data.prob == 0 then
|
||||
minetest.set_node(pp, {name="schemedit:void"})
|
||||
else
|
||||
local meta = minetest.get_meta(pp)
|
||||
if data.prob and data.prob ~= 255 and data.prob ~= 254 then
|
||||
meta:set_string("schemedit_prob", tostring(data.prob))
|
||||
else
|
||||
meta:set_string("schemedit_prob", "")
|
||||
end
|
||||
if data.force_place then
|
||||
meta:set_string("schemedit_force_place", "true")
|
||||
else
|
||||
meta:set_string("schemedit_force_place", "")
|
||||
end
|
||||
end
|
||||
d = d + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if success then
|
||||
minetest.chat_send_player(name, minetest.colorize("#00ff00",
|
||||
S("Imported schematic from @1", filepath)))
|
||||
else
|
||||
minetest.chat_send_player(name, minetest.colorize("red",
|
||||
S("Failed to import schematic from @1", filepath)))
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- Save meta before updating visuals
|
||||
local inv = realmeta:get_inventory():get_lists()
|
||||
realmeta:from_table({fields = meta, inventory = inv})
|
||||
@ -421,19 +517,19 @@ schemedit.add_form("slice", {
|
||||
end
|
||||
|
||||
if not self.panel_edit then
|
||||
form = form.."button[0,6;2,1;add;"..F(S("+ Add slice")).."]"
|
||||
form = form.."button[0,6;2.4,1;add;"..F(S("+ Add slice")).."]"
|
||||
end
|
||||
|
||||
if slices ~= "" and self.selected and not self.panel_add then
|
||||
if not self.panel_edit then
|
||||
form = form..[[
|
||||
button[2,6;2,1;remove;]]..F(S("- Remove slice"))..[[]
|
||||
button[4,6;2,1;edit;]]..F(S("+/- Edit slice"))..[[]
|
||||
button[2.4,6;2.4,1;remove;]]..F(S("- Remove slice"))..[[]
|
||||
button[4.8,6;2.4,1;edit;]]..F(S("+/- Edit slice"))..[[]
|
||||
]]
|
||||
else
|
||||
form = form..[[
|
||||
button[2,6;2,1;remove;]]..F(S("- Remove slice"))..[[]
|
||||
button[4,6;2,1;edit;]]..F(S("+/- Edit slice"))..[[]
|
||||
button[2.4,6;2.4,1;remove;]]..F(S("- Remove slice"))..[[]
|
||||
button[4.8,6;2.4,1;edit;]]..F(S("+/- Edit slice"))..[[]
|
||||
]]
|
||||
end
|
||||
end
|
||||
@ -651,7 +747,7 @@ function schemedit.mark(pos)
|
||||
local marker = minetest.add_entity({x = pos1.x + sizex - 0.5, y = pos1.y + sizey - 0.5, z = z + offset}, "schemedit:display")
|
||||
if marker ~= nil then
|
||||
marker:set_properties({
|
||||
visual_size={x=(sizex+0.01) * 2, y=sizey * 2},
|
||||
visual_size={x=(sizex+0.01) * 2, y=(sizey+0.01) * 2},
|
||||
})
|
||||
marker:get_luaentity().id = id
|
||||
marker:get_luaentity().owner = owner
|
||||
@ -672,9 +768,9 @@ function schemedit.mark(pos)
|
||||
local marker = minetest.add_entity({x = x + offset, y = pos1.y + sizey - 0.5, z = pos1.z + sizez - 0.5}, "schemedit:display")
|
||||
if marker ~= nil then
|
||||
marker:set_properties({
|
||||
visual_size={x=(sizez+0.01) * 2, y=sizey * 2},
|
||||
visual_size={x=(sizez+0.01) * 2, y=(sizey+0.01) * 2},
|
||||
})
|
||||
marker:set_yaw(math.pi / 2)
|
||||
marker:set_rotation({x=0, y=math.pi / 2, z=0})
|
||||
marker:get_luaentity().id = id
|
||||
marker:get_luaentity().owner = owner
|
||||
table.insert(m, marker)
|
||||
@ -682,6 +778,30 @@ function schemedit.mark(pos)
|
||||
low = false
|
||||
end
|
||||
|
||||
low = true
|
||||
-- XZ plane markers
|
||||
for _, y in ipairs({pos1.y - 0.5, pos2.y + 0.5}) do
|
||||
if low then
|
||||
offset = -0.01
|
||||
else
|
||||
offset = 0.01
|
||||
end
|
||||
|
||||
local marker = minetest.add_entity({x = pos1.x + sizex - 0.5, y = y + offset, z = pos1.z + sizez - 0.5}, "schemedit:display")
|
||||
if marker ~= nil then
|
||||
marker:set_properties({
|
||||
visual_size={x=(sizex+0.01) * 2, y=(sizez+0.01) * 2},
|
||||
})
|
||||
marker:set_rotation({x=math.pi/2, y=0, z=0})
|
||||
marker:get_luaentity().id = id
|
||||
marker:get_luaentity().owner = owner
|
||||
table.insert(m, marker)
|
||||
end
|
||||
low = false
|
||||
end
|
||||
|
||||
|
||||
|
||||
schemedit.markers[id] = m
|
||||
return true
|
||||
end
|
||||
@ -706,12 +826,12 @@ end
|
||||
-- Show probability and force_place status of a particular position for player in HUD.
|
||||
-- Probability is shown as a number followed by “[F]” if the node is force-placed.
|
||||
-- The distance to the node is also displayed below that. This can't be avoided and is
|
||||
-- and artifact of the waypoint HUD element. TODO: Hide displayed distance.
|
||||
-- and artifact of the waypoint HUD element.
|
||||
function schemedit.display_node_prob(player, pos, prob, force_place)
|
||||
local wpstring
|
||||
if prob and force_place == true then
|
||||
wpstring = string.format("%d [F]", prob)
|
||||
elseif prob then
|
||||
wpstring = string.format("%s [F]", prob)
|
||||
elseif prob and type(tonumber(prob)) == "number" then
|
||||
wpstring = prob
|
||||
elseif force_place == true then
|
||||
wpstring = "[F]"
|
||||
@ -720,6 +840,7 @@ function schemedit.display_node_prob(player, pos, prob, force_place)
|
||||
return player:hud_add({
|
||||
hud_elem_type = "waypoint",
|
||||
name = wpstring,
|
||||
precision = 0,
|
||||
text = "m", -- For the distance artifact
|
||||
number = text_color_number,
|
||||
world_pos = pos,
|
||||
@ -756,7 +877,7 @@ function schemedit.display_node_probs_region(player, pos1, pos2)
|
||||
|
||||
local prob, force_place
|
||||
local meta = minetest.get_meta(checkpos)
|
||||
prob = tonumber(meta:get_string("schemedit_prob"))
|
||||
prob = meta:get_string("schemedit_prob")
|
||||
force_place = meta:get_string("schemedit_force_place") == "true"
|
||||
local hud_id = schemedit.display_node_prob(player, checkpos, prob, force_place)
|
||||
if hud_id then
|
||||
@ -822,12 +943,18 @@ minetest.register_privilege("schematic_override", {
|
||||
give_to_singleplayer = false,
|
||||
})
|
||||
|
||||
local help_import = ""
|
||||
if can_import then
|
||||
help_import = S("Importing a schematic will load a schematic from the world directory, place it in front of the schematic creator and sets probability and force-place data accordingly.").."\n"
|
||||
end
|
||||
|
||||
-- [node] Schematic creator
|
||||
minetest.register_node("schemedit:creator", {
|
||||
description = S("Schematic Creator"),
|
||||
_doc_items_longdesc = S("The schematic creator is used to save a region of the world into a schematic file (.mts)."),
|
||||
_doc_items_usagehelp = S("To get started, place the block facing directly in front of any bottom left corner of the structure you want to save. This block can only be accessed by the placer or by anyone with the “schematic_override” privilege.").."\n"..
|
||||
S("To save a region, use the block, enter the size and a schematic name and hit “Export schematic”. The file will always be saved in the world directory. Note you can use this name in the /placeschem command to place the schematic again.").."\n\n"..
|
||||
help_import..
|
||||
S("The other features of the schematic creator are optional and are used to allow to add randomness and fine-tuning.").."\n\n"..
|
||||
S("Y slices are used to remove entire slices based on chance. For each slice of the schematic region along the Y axis, you can specify that it occurs only with a certain chance. In the Y slice tab, you have to specify the Y slice height (0 = bottom) and a probability from 0 to 255 (255 is for 100%). By default, all Y slices occur always.").."\n\n"..
|
||||
S("With a schematic node probability tool, you can set a probability for each node and enable them to overwrite all nodes when placed as schematic. This tool must be used prior to the file export."),
|
||||
@ -883,6 +1010,9 @@ S("With a schematic node probability tool, you can set a probability for each no
|
||||
after_destruct = function(pos)
|
||||
schemedit.unmark(pos)
|
||||
end,
|
||||
|
||||
-- No support for Minetest Game's screwdriver
|
||||
on_rotate = false,
|
||||
})
|
||||
|
||||
minetest.register_tool("schemedit:probtool", {
|
||||
@ -920,7 +1050,7 @@ S("The node HUD is not updated automatically and may be outdated. The node HUD o
|
||||
-- within the creator's region.
|
||||
local use_creator_region = false
|
||||
if pointed_thing and pointed_thing.type == "node" and pointed_thing.under then
|
||||
punchpos = pointed_thing.under
|
||||
local punchpos = pointed_thing.under
|
||||
local node = minetest.get_node(punchpos)
|
||||
if node.name == "schemedit:creator" then
|
||||
local pos1, pos2 = schemedit.size(punchpos)
|
||||
@ -1004,6 +1134,7 @@ minetest.register_entity("schemedit:display", {
|
||||
visual_size = {x=10, y=10},
|
||||
pointable = false,
|
||||
physical = false,
|
||||
static_save = false,
|
||||
glow = minetest.LIGHT_MAX,
|
||||
|
||||
on_step = function(self, dtime)
|
||||
@ -1018,6 +1149,17 @@ minetest.register_entity("schemedit:display", {
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_lbm({
|
||||
label = "Reset schematic creator border entities",
|
||||
name = "schemedit:reset_border",
|
||||
nodenames = "schemedit:creator",
|
||||
run_at_every_load = true,
|
||||
action = function(pos, node)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("schem_border", "false")
|
||||
end,
|
||||
})
|
||||
|
||||
-- [chatcommand] Place schematic
|
||||
minetest.register_chatcommand("placeschem", {
|
||||
description = S("Place schematic at the position specified or the current player position (loaded from @1)", export_path_trunc),
|
||||
@ -1035,7 +1177,7 @@ minetest.register_chatcommand("placeschem", {
|
||||
pos = minetest.get_player_by_name(name):get_pos()
|
||||
end
|
||||
|
||||
-- Automatiically add file name suffix if omitted
|
||||
-- Automatically add file name suffix if omitted
|
||||
local schem_full
|
||||
if string.sub(schem, string.len(schem)-3, string.len(schem)) == ".mts" then
|
||||
schem_full = schem
|
||||
@ -1043,7 +1185,20 @@ minetest.register_chatcommand("placeschem", {
|
||||
schem_full = schem .. ".mts"
|
||||
end
|
||||
|
||||
local success = minetest.place_schematic(pos, export_path_full .. DIR_DELIM .. schem_full, "random", nil, false)
|
||||
local success = false
|
||||
local schem_path = export_path_full .. DIR_DELIM .. schem_full
|
||||
if minetest.read_schematic then
|
||||
-- We don't call minetest.place_schematic with the path name directly because
|
||||
-- this would trigger the caching and we wouldn't get any updates to the schematic
|
||||
-- files when we reload. minetest.read_schematic circumvents that.
|
||||
local schematic = minetest.read_schematic(schem_path, {})
|
||||
if schematic then
|
||||
success = minetest.place_schematic(pos, schematic, "random", nil, false)
|
||||
end
|
||||
else
|
||||
-- Legacy support for Minetest versions that do not have minetest.read_schematic
|
||||
success = minetest.place_schematic(schem_path, schematic, "random", nil, false)
|
||||
end
|
||||
|
||||
if success == nil then
|
||||
return false, S("Schematic file could not be loaded!")
|
||||
|
@ -1,5 +1,6 @@
|
||||
# textdomain: schemedit
|
||||
<world path>=<Weltpfad>
|
||||
<name>=<Name>
|
||||
Probability: @1=Wahrscheinlichkeit: @1
|
||||
Not Set=Nicht gesetzt
|
||||
Force placement=Platzierung erzwingen
|
||||
@ -7,11 +8,17 @@ Hide border=Rand verbergen
|
||||
Show border=Rand anzeigen
|
||||
Position: @1=Position: @1
|
||||
Owner: @1=Eigentümer: @1
|
||||
Size: @1=Größe: @1
|
||||
Schematic name: @1=Schematic-Name: @1
|
||||
Schematic name:=Schematic-Name:
|
||||
Save=Speichern
|
||||
OK=OK
|
||||
Save schematic name=Schematic-Name speichern
|
||||
Export schematic=Schematic exportieren
|
||||
Import schematic=Schematic importieren
|
||||
Imported schematic from @1=Schematic von @1 importiert
|
||||
Failed to import schematic from @1=Schematic konnte nicht von @1 importiert werden
|
||||
The schematic will be exported as a .mts file and stored in@n@1=Das Schematic wird als .mts-Datei gespeichert in:@n@1
|
||||
Export/import path:@n@1=Export-/Importpfad:@n@1
|
||||
Save size=Größe speichern
|
||||
Help=Hilfe
|
||||
Exported schematic to @1=Schematic nach @1 exportiert
|
||||
@ -35,6 +42,7 @@ Schematic Creator=Schematic-Macher
|
||||
The schematic creator is used to save a region of the world into a schematic file (.mts).=Der Schematic-Macher wird benutzt, um eine Region der Welt in eine Schematic-Datei (.mts) zu speichern.
|
||||
To get started, place the block facing directly in front of any bottom left corner of the structure you want to save. This block can only be accessed by the placer or by anyone with the “schematic_override” privilege.=Um anzufangen, platzieren Sie den Block direkt vor einer beliebigen unteren linken Ecke des Gebäudes, das Sie speichern möchten. Dieser Block kann nur vom Platzierer oder von Spielern mit dem „schematic_override“-Privileg benutzt werden.
|
||||
To save a region, use the block, enter the size and a schematic name and hit “Export schematic”. The file will always be saved in the world directory. Note you can use this name in the /placeschem command to place the schematic again.=Um eine Region zu speichern, benutzen Sie den Block, geben Sie die Größe und einen Schematic-Namen ein und klicken Sie auf „Schematic exportieren“. Die Datei wird immer im Weltverzeichnis gespeichert. Beachten Sie, dass Sie diesen Namen im „/placeschem“-Befehl benutzen können, um das Schematic erneut zu platzieren.
|
||||
Importing a schematic will load a schematic from the world directory, place it in front of the schematic creator and sets probability and force-place data accordingly.=Das Importieren eines Schematics wird eine Schematicdatei aus dem Weltverzeichnis laden, sie vor dem Schematic-Macher platzieren und die Wahrscheinlichkeits- und Zwangsplatzierungsdaten entsprechend setzen.
|
||||
The other features of the schematic creator are optional and are used to allow to add randomness and fine-tuning.=Die anderen Funktionen des Schematic-Machers sind optional und werden für Zufälligkeit und Feinjustierungen benutzt.
|
||||
Y slices are used to remove entire slices based on chance. For each slice of the schematic region along the Y axis, you can specify that it occurs only with a certain chance. In the Y slice tab, you have to specify the Y slice height (0 @= bottom) and a probability from 0 to 255 (255 is for 100%). By default, all Y slices occur always.=Y-Scheiben werden benutzt, um ganze Scheiben mit einer gewissen Wahrscheinlichkeit auszulassen. Für jede Scheibe der Schematic-Region entlang der Y-Achse können Sie festlegen, dass sie nur mit einer gewissen Wahrscheinlichkeit auftritt. In der Registerkarte „Y-Scheiben“ müssen Sie die Höhe der Y-Scheibe festlegen (0 @= Boden) sowie eine Wahrscheinlichkeit zwischen 0 und 255 (255 steht für 100%). Standardmäßig treten alle Y-Scheiben immer auf.
|
||||
With a schematic node probability tool, you can set a probability for each node and enable them to overwrite all nodes when placed as schematic. This tool must be used prior to the file export.=Mit einem Schematic-Node-Wahrscheinlichkeitswerkzeug können Sie die Wahrscheinlichkeit für jeden Node setzen und sie dazu aktivieren, alle Nodes zu ersetzen, wenn sie als Schematic platziert werden. Dieses Werkzeug muss vor dem Dateiexport benutzt werden.
|
||||
@ -62,3 +70,4 @@ Main=Grundeinstellungen
|
||||
X size:=X-Größe:
|
||||
Y size:=Y-Größe:
|
||||
Z size:=Z-Größe:
|
||||
Insufficient privileges! You need the “debug” privilege to do this.=Unzureichende Privilegien! Sie benötigen das „debug“-Privileg, um dies tun zu können.
|
||||
|
@ -1,5 +1,6 @@
|
||||
# textdomain: schemedit
|
||||
<world path>=
|
||||
<name>=
|
||||
Not Set=
|
||||
Probability: @1=
|
||||
Force placement=
|
||||
@ -7,11 +8,16 @@ Hide border=
|
||||
Show border=
|
||||
Position: @1=
|
||||
Owner: @1=
|
||||
Size: @1=
|
||||
Schematic name: @1=
|
||||
Schematic name:=
|
||||
Save=
|
||||
OK=
|
||||
Save schematic name=
|
||||
Export schematic=
|
||||
The schematic will be exported as a .mts file and stored in@n@1=
|
||||
Import schematic=
|
||||
Imported schematic from @1=
|
||||
Failed to import schematic from @1=
|
||||
Export/import path:@n@1=
|
||||
Save size=
|
||||
Help=
|
||||
Exported schematic to @1=
|
||||
@ -37,6 +43,7 @@ To save a region, use the block, enter the size and a schematic name and hit “
|
||||
The other features of the schematic creator are optional and are used to allow to add randomness and fine-tuning.=
|
||||
Y slices are used to remove entire slices based on chance. For each slice of the schematic region along the Y axis, you can specify that it occurs only with a certain chance. In the Y slice tab, you have to specify the Y slice height (0 @= bottom) and a probability from 0 to 255 (255 is for 100%). By default, all Y slices occur always.=
|
||||
With a schematic node probability tool, you can set a probability for each node and enable them to overwrite all nodes when placed as schematic. This tool must be used prior to the file export.=
|
||||
Importing a schematic will load a schematic from the world directory, place it in front of the schematic creator and sets probability and force-place data accordingly.=
|
||||
(owned by @1)=
|
||||
This is an advanced tool which only makes sense when used together with a schematic creator. It is used to finetune the way how nodes from a schematic are placed.=
|
||||
It allows you to set two things:=
|
||||
@ -61,3 +68,4 @@ Main=
|
||||
X size:=
|
||||
Y size:=
|
||||
Z size:=
|
||||
Insufficient privileges! You need the “debug” privilege to do this.=
|
||||
|
Reference in New Issue
Block a user