Added Main Files
Dump Em In!
9
kingdoms_game/.gitignore
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
## Generic ignorable patterns and files
|
||||||
|
*~
|
||||||
|
.*.swp
|
||||||
|
*bak*
|
||||||
|
tags
|
||||||
|
*.vim
|
||||||
|
|
||||||
|
## Files related to minetest development cycle
|
||||||
|
*.patch
|
53
kingdoms_game/README.txt
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
Minetest Game [minetest_game]
|
||||||
|
=============================
|
||||||
|
The main subgame for the Minetest engine
|
||||||
|
========================================
|
||||||
|
|
||||||
|
To use this subgame with the Minetest engine, insert this repository as
|
||||||
|
/games/minetest_game
|
||||||
|
|
||||||
|
The Minetest engine can be found in:
|
||||||
|
https://github.com/minetest/minetest/
|
||||||
|
|
||||||
|
Compatibility
|
||||||
|
--------------
|
||||||
|
The Minetest Game github master HEAD is generally compatible with the github
|
||||||
|
master HEAD of the Minetest engine.
|
||||||
|
|
||||||
|
Additionally, when the Minetest engine is tagged to be a certain version (eg.
|
||||||
|
0.4.10), Minetest Game is tagged with the version too.
|
||||||
|
|
||||||
|
When stable releases are made, Minetest Game is packaged and made available in
|
||||||
|
http://minetest.net/download
|
||||||
|
and in case the repository has grown too much, it may be reset. In that sense,
|
||||||
|
this is not a "real" git repository. (Package maintainers please note!)
|
||||||
|
|
||||||
|
License of source code
|
||||||
|
----------------------
|
||||||
|
Copyright (C) 2010-2012 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||||
|
See README.txt in each mod directory for information about other authors.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2.1 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License along
|
||||||
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
License of media (textures and sounds)
|
||||||
|
--------------------------------------
|
||||||
|
Copyright (C) 2010-2012 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||||
|
See README.txt in each mod directory for information about other authors.
|
||||||
|
|
||||||
|
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
|
||||||
|
http://creativecommons.org/licenses/by-sa/3.0/
|
||||||
|
|
||||||
|
License of menu/header.png
|
||||||
|
Copyright (C) 2015 paramat CC BY-SA 3.0
|
1
kingdoms_game/game.conf
Normal file
@ -0,0 +1 @@
|
|||||||
|
name = Minetest Wars
|
473
kingdoms_game/game_api.txt
Normal file
@ -0,0 +1,473 @@
|
|||||||
|
Minetest Game API
|
||||||
|
=================
|
||||||
|
GitHub Repo: https://github.com/minetest/minetest_game
|
||||||
|
|
||||||
|
Introduction
|
||||||
|
------------
|
||||||
|
|
||||||
|
The Minetest Game subgame offers multiple new possibilities in addition to the Minetest engine's built-in API,
|
||||||
|
allowing you to add new plants to farming mod, buckets for new liquids, new stairs and custom panes.
|
||||||
|
For information on the Minetest API, visit https://github.com/minetest/minetest/blob/master/doc/lua_api.txt
|
||||||
|
Please note:
|
||||||
|
|
||||||
|
* [XYZ] refers to a section the Minetest API
|
||||||
|
* [#ABC] refers to a section in this document
|
||||||
|
|
||||||
|
Bucket API
|
||||||
|
----------
|
||||||
|
|
||||||
|
The bucket API allows registering new types of buckets for non-default liquids.
|
||||||
|
|
||||||
|
|
||||||
|
bucket.register_liquid(
|
||||||
|
"default:lava_source", -- name of the source node
|
||||||
|
"default:lava_flowing", -- name of the flowing node
|
||||||
|
"bucket:bucket_lava", -- name of the new bucket item (or nil if liquid is not takeable)
|
||||||
|
"bucket_lava.png", -- texture of the new bucket item (ignored if itemname == nil)
|
||||||
|
"Lava Bucket", -- text description of the bucket item
|
||||||
|
{lava_bucket = 1} -- groups of the bucket item, OPTIONAL
|
||||||
|
)
|
||||||
|
|
||||||
|
Beds API
|
||||||
|
--------
|
||||||
|
|
||||||
|
beds.register_bed(
|
||||||
|
"beds:bed", -- Bed name
|
||||||
|
def -- See [#Bed definition]
|
||||||
|
)
|
||||||
|
|
||||||
|
* `beds.read_spawns() ` Returns a table containing players respawn positions
|
||||||
|
* `beds.kick_players()` Forces all players to leave bed
|
||||||
|
* `beds.skip_night()` Sets world time to morning and saves respawn position of all players currently sleeping
|
||||||
|
|
||||||
|
###Bed definition
|
||||||
|
|
||||||
|
{
|
||||||
|
description = "Simple Bed",
|
||||||
|
inventory_image = "beds_bed.png",
|
||||||
|
wield_image = "beds_bed.png",
|
||||||
|
tiles = {
|
||||||
|
bottom = {'Tile definition'}, -- the tiles of the bottom part of the bed.
|
||||||
|
top = {Tile definition} -- the tiles of the bottom part of the bed.
|
||||||
|
},
|
||||||
|
nodebox = {
|
||||||
|
bottom = 'regular nodebox', -- bottom part of bed (see [Node boxes])
|
||||||
|
top = 'regular nodebox', -- top part of bed (see [Node boxes])
|
||||||
|
},
|
||||||
|
selectionbox = 'regular nodebox', -- for both nodeboxes (see [Node boxes])
|
||||||
|
recipe = { -- Craft recipe
|
||||||
|
{"group:wool", "group:wool", "group:wool"},
|
||||||
|
{"group:wood", "group:wood", "group:wood"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Doors API
|
||||||
|
---------
|
||||||
|
|
||||||
|
The doors mod allows modders to register custom doors and trapdoors.
|
||||||
|
|
||||||
|
`doors.register_door(name, def)`
|
||||||
|
|
||||||
|
* Registers new door
|
||||||
|
* `name` Name for door
|
||||||
|
* `def` See [#Door definition]
|
||||||
|
|
||||||
|
`doors.register_trapdoor(name, def)`
|
||||||
|
|
||||||
|
* Registers new trapdoor
|
||||||
|
* `name` Name for trapdoor
|
||||||
|
* `def` See [#Trapdoor definition]
|
||||||
|
|
||||||
|
`doors.get(pos)`
|
||||||
|
|
||||||
|
* `pos` A position as a table, e.g `{x = 1, y = 1, z = 1}`
|
||||||
|
* Returns an ObjecRef to a door, or nil if the position does not contain a door
|
||||||
|
|
||||||
|
###Methods
|
||||||
|
|
||||||
|
:open(player) -- Open the door object, returns if door was opened
|
||||||
|
:close(player) -- Close the door object, returns if door was closed
|
||||||
|
:toggle(player) -- Toggle the door state, returns if state was toggled
|
||||||
|
:state() -- returns the door state, true = open, false = closed
|
||||||
|
|
||||||
|
the "player" parameter can be omitted in all methods. If passed then
|
||||||
|
the usual permission checks will be performed to make sure the player
|
||||||
|
has the permissions needed to open this door. If omitted then no
|
||||||
|
permission checks are performed.
|
||||||
|
|
||||||
|
###Door definition
|
||||||
|
|
||||||
|
description = "Door description",
|
||||||
|
inventory_image = "mod_door_inv.png",
|
||||||
|
groups = {choppy = 2},
|
||||||
|
tiles = {"mod_door.png"}, -- UV map.
|
||||||
|
recipe = craftrecipe,
|
||||||
|
sounds = default.node_sound_wood_defaults(), -- optional
|
||||||
|
sound_open = sound play for open door, -- optional
|
||||||
|
sound_close = sound play for close door, -- optional
|
||||||
|
protected = false, -- If true, only placer can open the door (locked for others)
|
||||||
|
|
||||||
|
###Trapdoor definition
|
||||||
|
|
||||||
|
description = "Trapdoor description",
|
||||||
|
inventory_image = "mod_trapdoor_inv.png",
|
||||||
|
groups = {choppy = 2},
|
||||||
|
tile_front = "doors_trapdoor.png", -- the texture for the front and back of the trapdoor
|
||||||
|
tile_side = "doors_trapdoor_side.png", -- the tiles of the four side parts of the trapdoor
|
||||||
|
sounds = default.node_sound_wood_defaults(), -- optional
|
||||||
|
sound_open = sound play for open door, -- optional
|
||||||
|
sound_close = sound play for close door, -- optional
|
||||||
|
protected = false, -- If true, only placer can open the door (locked for others)
|
||||||
|
|
||||||
|
Fence API
|
||||||
|
---------
|
||||||
|
Allows creation of new fences with "fencelike" drawtype.
|
||||||
|
|
||||||
|
`default.register_fence(name, item definition)`
|
||||||
|
|
||||||
|
Registers a new fence. Custom fields texture and material are required, as
|
||||||
|
are name and description. The rest is optional. You can pass most normal
|
||||||
|
nodedef fields here except drawtype. The fence group will always be added
|
||||||
|
for this node.
|
||||||
|
|
||||||
|
###fence definition
|
||||||
|
|
||||||
|
name = "default:fence_wood",
|
||||||
|
description = "Wooden Fence",
|
||||||
|
texture = "default_wood.png",
|
||||||
|
material = "default:wood",
|
||||||
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
|
||||||
|
#Walls API
|
||||||
|
---------
|
||||||
|
The walls API allows easy addition of stone auto-connecting wall nodes.
|
||||||
|
|
||||||
|
walls.register(name, desc, texture, mat, sounds)
|
||||||
|
^ name = "walls:stone_wall". Node name.
|
||||||
|
^ desc = "A Stone wall"
|
||||||
|
^ texture = "default_stone.png"
|
||||||
|
^ mat = "default:stone". Used to auto-generate crafting recipe.
|
||||||
|
^ sounds = sounds: see [#Default sounds]
|
||||||
|
|
||||||
|
Farming API
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The farming API allows you to easily register plants and hoes.
|
||||||
|
|
||||||
|
`farming.register_hoe(name, hoe definition)`
|
||||||
|
* Register a new hoe, see [#hoe definition]
|
||||||
|
|
||||||
|
`farming.register_plant(name, Plant definition)`
|
||||||
|
* Register a new growing plant, see [#Plant definition]
|
||||||
|
|
||||||
|
###Hoe Definition
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
description = "", -- Description for tooltip
|
||||||
|
inventory_image = "unknown_item.png", -- Image to be used as wield- and inventory image
|
||||||
|
max_uses = 30, -- Uses until destroyed
|
||||||
|
material = "", -- Material for recipes
|
||||||
|
recipe = { -- Craft recipe, if material isn't used
|
||||||
|
{"air", "air", "air"},
|
||||||
|
{"", "group:stick"},
|
||||||
|
{"", "group:stick"},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
###Plant definition
|
||||||
|
|
||||||
|
{
|
||||||
|
description = "", -- Description of seed item
|
||||||
|
inventory_image = "unknown_item.png", -- Image to be used as seed's wield- and inventory image
|
||||||
|
steps = 8, -- How many steps the plant has to grow, until it can be harvested
|
||||||
|
-- ^ Always provide a plant texture for each step, format: modname_plantname_i.png (i = stepnumber)
|
||||||
|
minlight = 13, -- Minimum light to grow
|
||||||
|
maxlight = default.LIGHT_MAX -- Maximum light to grow
|
||||||
|
}
|
||||||
|
|
||||||
|
Fire API
|
||||||
|
--------
|
||||||
|
|
||||||
|
`on_burn(pos)`
|
||||||
|
|
||||||
|
* Called when fire attempts to remove a burning node.
|
||||||
|
* `pos` Position of the burning node.
|
||||||
|
|
||||||
|
Screwdriver API
|
||||||
|
---------------
|
||||||
|
|
||||||
|
The screwdriver API allows you to control a node's behaviour when a screwdriver is used on it.
|
||||||
|
To use it, add the `on_screwdriver` function to the node definition.
|
||||||
|
|
||||||
|
`on_rotate(pos, node, user, mode, new_param2)`
|
||||||
|
|
||||||
|
* `pos` Position of the node that the screwdriver is being used on
|
||||||
|
* `node` that node
|
||||||
|
* `user` The player who used the screwdriver
|
||||||
|
* `mode` screwdriver.ROTATE_FACE or screwdriver.ROTATE_AXIS
|
||||||
|
* `new_param2` the new value of param2 that would have been set if on_rotate wasn't there
|
||||||
|
* return value: false to disallow rotation, nil to keep default behaviour, true to allow
|
||||||
|
it but to indicate that changed have already been made (so the screwdriver will wear out)
|
||||||
|
* use `on_rotate = screwdriver.disallow` to always disallow rotation
|
||||||
|
* use `on_rotate = screwdriver.rotate_simple` to allow only face rotation
|
||||||
|
|
||||||
|
Stairs API
|
||||||
|
----------
|
||||||
|
|
||||||
|
The stairs API lets you register stairs and slabs and ensures that they are registered the same way as those
|
||||||
|
delivered with Minetest Game, to keep them compatible with other mods.
|
||||||
|
|
||||||
|
`stairs.register_stair(subname, recipeitem, groups, images, description, sounds)`
|
||||||
|
|
||||||
|
* Registers a stair.
|
||||||
|
* `subname`: Basically the material name (e.g. cobble) used for the stair name. Nodename pattern: "stairs:stair_subname"
|
||||||
|
* `recipeitem`: Item used in the craft recipe, e.g. "default:cobble"
|
||||||
|
* `groups`: see [Known damage and digging time defining groups]
|
||||||
|
* `images`: see [Tile definition]
|
||||||
|
* `description`: used for the description field in the stair's definition
|
||||||
|
* `sounds`: see [#Default sounds]
|
||||||
|
|
||||||
|
`stairs.register_slab(subname, recipeitem, groups, images, description, sounds)`
|
||||||
|
|
||||||
|
* Registers a slabs
|
||||||
|
* `subname`: Basically the material name (e.g. cobble) used for the stair name. Nodename pattern: "stairs:stair_subname"
|
||||||
|
* `recipeitem`: Item used in the craft recipe, e.g. "default:cobble"
|
||||||
|
* `groups`: see [Known damage and digging time defining groups]
|
||||||
|
* `images`: see [Tile definition]
|
||||||
|
* `description`: used for the description field in the stair's definition
|
||||||
|
* `sounds`: see [#Default sounds]
|
||||||
|
|
||||||
|
`stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab, sounds)`
|
||||||
|
|
||||||
|
* A wrapper for stairs.register_stair and stairs.register_slab
|
||||||
|
* Uses almost the same arguments as stairs.register_stair
|
||||||
|
* `desc_stair`: Description for stair node
|
||||||
|
* `desc_slab`: Description for slab node
|
||||||
|
|
||||||
|
Xpanes API
|
||||||
|
----------
|
||||||
|
|
||||||
|
Creates panes that automatically connect to each other
|
||||||
|
|
||||||
|
`xpanes.register_pane(subname, def)`
|
||||||
|
|
||||||
|
* `subname`: used for nodename. Result: "xpanes:subname" and "xpanes:subname_{2..15}"
|
||||||
|
* `def`: See [#Pane definition]
|
||||||
|
|
||||||
|
###Pane definition
|
||||||
|
|
||||||
|
{
|
||||||
|
textures = {"texture_Bottom_top", "texture_left_right", "texture_front_back"}, -- More tiles aren't supported
|
||||||
|
groups = {group = rating}, -- Uses the known node groups, see [Known damage and digging time defining groups]
|
||||||
|
sounds = SoundSpec, -- See [#Default sounds]
|
||||||
|
recipe = {{"","","","","","","","",""}}, -- Recipe field only
|
||||||
|
}
|
||||||
|
|
||||||
|
Raillike definitions
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
The following nodes use the group `connect_to_raillike` and will only connect to
|
||||||
|
raillike nodes within this group and the same group value.
|
||||||
|
Use `minetest.raillike_group(<Name>)` to get the group value.
|
||||||
|
|
||||||
|
| Node type | Raillike group name
|
||||||
|
|-----------------------|---------------------
|
||||||
|
| default:rail | "rail"
|
||||||
|
| tnt:gunpowder | "gunpowder"
|
||||||
|
| tnt:gunpowder_burning | "gunpowder"
|
||||||
|
|
||||||
|
Example:
|
||||||
|
If you want to add a new rail type and want it to connect with default:rail,
|
||||||
|
add `connect_to_raillike=minetest.raillike_group("rail")` into the `groups` table
|
||||||
|
of your node.
|
||||||
|
|
||||||
|
|
||||||
|
Default sounds
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Sounds inside the default table can be used within the sounds field of node definitions.
|
||||||
|
|
||||||
|
* `default.node_sound_defaults()`
|
||||||
|
* `default.node_sound_stone_defaults()`
|
||||||
|
* `default.node_sound_dirt_defaults()`
|
||||||
|
* `default.node_sound_sand_defaults()`
|
||||||
|
* `default.node_sound_wood_defaults()`
|
||||||
|
* `default.node_sound_leaves_defaults()`
|
||||||
|
* `default.node_sound_glass_defaults()`
|
||||||
|
|
||||||
|
Default constants
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
`default.LIGHT_MAX` The maximum light level (see [Node definition] light_source)
|
||||||
|
|
||||||
|
Player API
|
||||||
|
----------
|
||||||
|
|
||||||
|
The player API can register player models and update the player's appearence
|
||||||
|
|
||||||
|
`default.player_register_model(name, def)`
|
||||||
|
|
||||||
|
* Register a new model to be used by players.
|
||||||
|
* name: model filename such as "character.x", "foo.b3d", etc.
|
||||||
|
* def: See [#Model definition]
|
||||||
|
|
||||||
|
`default.registered_player_models[name]`
|
||||||
|
|
||||||
|
* Get a model's definition
|
||||||
|
* see [#Model definition]
|
||||||
|
|
||||||
|
`default.player_set_model(player, model_name)`
|
||||||
|
|
||||||
|
* Change a player's model
|
||||||
|
* `player`: PlayerRef
|
||||||
|
* `model_name`: model registered with player_register_model()
|
||||||
|
|
||||||
|
`default.player_set_animation(player, anim_name [, speed])`
|
||||||
|
|
||||||
|
* Applies an animation to a player
|
||||||
|
* anim_name: name of the animation.
|
||||||
|
* speed: frames per second. If nil, default from the model is used
|
||||||
|
|
||||||
|
`default.player_set_textures(player, textures)`
|
||||||
|
|
||||||
|
* Sets player textures
|
||||||
|
* `player`: PlayerRef
|
||||||
|
* `textures`: array of textures, If `textures` is nil, the default textures from the model def are used
|
||||||
|
|
||||||
|
default.player_get_animation(player)
|
||||||
|
|
||||||
|
* Returns a table containing fields `model`, `textures` and `animation`.
|
||||||
|
* Any of the fields of the returned table may be nil.
|
||||||
|
* player: PlayerRef
|
||||||
|
|
||||||
|
###Model Definition
|
||||||
|
|
||||||
|
{
|
||||||
|
animation_speed = 30, -- Default animation speed, in FPS.
|
||||||
|
textures = {"character.png", }, -- Default array of textures.
|
||||||
|
visual_size = {x = 1, y = 1}, -- Used to scale the model.
|
||||||
|
animations = {
|
||||||
|
-- <anim_name> = {x = <start_frame>, y = <end_frame>},
|
||||||
|
foo = {x = 0, y = 19},
|
||||||
|
bar = {x = 20, y = 39},
|
||||||
|
-- ...
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
Leafdecay
|
||||||
|
---------
|
||||||
|
|
||||||
|
To enable leaf decay for a node, add it to the `leafdecay` group.
|
||||||
|
|
||||||
|
The rating of the group determines how far from a node in the group `tree`
|
||||||
|
the node can be without decaying.
|
||||||
|
|
||||||
|
If `param2` of the node is ~= 0, the node will always be preserved. Thus, if
|
||||||
|
the player places a node of that kind, you will want to set `param2 = 1` or so.
|
||||||
|
|
||||||
|
The function `default.after_place_leaves` can be set as `after_place_node of a node`
|
||||||
|
to set param2 to 1 if the player places the node (should not be used for nodes
|
||||||
|
that use param2 otherwise (e.g. facedir)).
|
||||||
|
|
||||||
|
If the node is in the `leafdecay_drop` group then it will always be dropped as an
|
||||||
|
item.
|
||||||
|
|
||||||
|
Dyes
|
||||||
|
----
|
||||||
|
|
||||||
|
To make recipes that will work with any dye ever made by anybody, define
|
||||||
|
them based on groups. You can select any group of groups, based on your need for
|
||||||
|
amount of colors.
|
||||||
|
|
||||||
|
###Color groups
|
||||||
|
|
||||||
|
Base color groups:
|
||||||
|
|
||||||
|
* `basecolor_white`
|
||||||
|
* `basecolor_grey`
|
||||||
|
* `basecolor_black`
|
||||||
|
* `basecolor_red`
|
||||||
|
* `basecolor_yellow`
|
||||||
|
* `basecolor_green`
|
||||||
|
* `basecolor_cyan`
|
||||||
|
* `basecolor_blue`
|
||||||
|
* `basecolor_magenta`
|
||||||
|
|
||||||
|
Extended color groups ( * means also base color )
|
||||||
|
|
||||||
|
* `excolor_white` *
|
||||||
|
* `excolor_lightgrey`
|
||||||
|
* `excolor_grey` *
|
||||||
|
* `excolor_darkgrey`
|
||||||
|
* `excolor_black` *
|
||||||
|
* `excolor_red` *
|
||||||
|
* `excolor_orange`
|
||||||
|
* `excolor_yellow` *
|
||||||
|
* `excolor_lime`
|
||||||
|
* `excolor_green` *
|
||||||
|
* `excolor_aqua`
|
||||||
|
* `excolor_cyan` *
|
||||||
|
* `excolor_sky_blue`
|
||||||
|
* `excolor_blue` *
|
||||||
|
* `excolor_violet`
|
||||||
|
* `excolor_magenta` *
|
||||||
|
* `excolor_red_violet`
|
||||||
|
|
||||||
|
The whole unifieddyes palette as groups:
|
||||||
|
|
||||||
|
* `unicolor_<excolor>`
|
||||||
|
|
||||||
|
For the following, no white/grey/black is allowed:
|
||||||
|
|
||||||
|
* `unicolor_medium_<excolor>`
|
||||||
|
* `unicolor_dark_<excolor>`
|
||||||
|
* `unicolor_light_<excolor>`
|
||||||
|
* `unicolor_<excolor>_s50`
|
||||||
|
* `unicolor_medium_<excolor>_s50`
|
||||||
|
* `unicolor_dark_<excolor>_s50`
|
||||||
|
|
||||||
|
Example of one shapeless recipe using a color group:
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "shapeless",
|
||||||
|
output = '<mod>:item_yellow',
|
||||||
|
recipe = {'<mod>:item_no_color', 'group:basecolor_yellow'},
|
||||||
|
})
|
||||||
|
|
||||||
|
###Color lists
|
||||||
|
|
||||||
|
* `dye.basecolors` are an array containing the names of available base colors
|
||||||
|
|
||||||
|
* `dye.excolors` are an array containing the names of the available extended colors
|
||||||
|
|
||||||
|
Trees
|
||||||
|
-----
|
||||||
|
|
||||||
|
* `default.grow_tree(pos, is_apple_tree)`
|
||||||
|
* Grows a mgv6 tree or apple tree at pos
|
||||||
|
|
||||||
|
* `default.grow_jungle_tree(pos)`
|
||||||
|
* Grows a mgv6 jungletree at pos
|
||||||
|
|
||||||
|
* `default.grow_pine_tree(pos)`
|
||||||
|
* Grows a mgv6 pinetree at pos
|
||||||
|
|
||||||
|
* `default.grow_new_apple_tree(pos)`
|
||||||
|
* Grows a new design apple tree at pos
|
||||||
|
|
||||||
|
* `default.grow_new_jungle_tree(pos)`
|
||||||
|
* Grows a new design jungle tree at pos
|
||||||
|
|
||||||
|
* `default.grow_new_pine_tree(pos)`
|
||||||
|
* Grows a new design pine tree at pos
|
||||||
|
|
||||||
|
* `default.grow_new_acacia_tree(pos)`
|
||||||
|
* Grows a new design acacia tree at pos
|
||||||
|
|
||||||
|
* `default.grow_new_aspen_tree(pos)`
|
||||||
|
* Grows a new design aspen tree at pos
|
||||||
|
|
||||||
|
* `default.grow_new_snowy_pine_tree(pos)`
|
||||||
|
* Grows a new design snowy pine tree at pos
|
BIN
kingdoms_game/menu/header.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
kingdoms_game/menu/icon.png
Normal file
After Width: | Height: | Size: 281 B |
0
kingdoms_game/minetest.conf
Normal file
40
kingdoms_game/minetest.conf.example
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# This file contains settings of Minetest Game that can be changed in minetest.conf
|
||||||
|
# By default, all the settings are commented and not functional.
|
||||||
|
# Uncomment settings by removing the preceding #.
|
||||||
|
|
||||||
|
# Whether creative mode (fast digging of all blocks, unlimited resources) should be enabled
|
||||||
|
#creative_mode = false
|
||||||
|
|
||||||
|
# The time in seconds after which the bones of a dead player can be looted by everyone
|
||||||
|
# 0 to disable
|
||||||
|
#share_bones_time = 1200
|
||||||
|
|
||||||
|
# How much earlier the bones of a dead player can be looted by
|
||||||
|
# everyone if the player dies in a protected area they don't own.
|
||||||
|
# 0 to disable. By default it is "share_bones_time" divide by four.
|
||||||
|
#share_bones_time_early = 300
|
||||||
|
|
||||||
|
# Whether standard fire should be disabled ('basic flame' nodes will disappear)
|
||||||
|
# 'permanent flame' nodes will remain with either setting
|
||||||
|
#disable_fire = false
|
||||||
|
|
||||||
|
# Whether steel tools, torches and cobblestone should be given to new players
|
||||||
|
#give_initial_stuff = false
|
||||||
|
|
||||||
|
# Whether the TNT mod should be enabled
|
||||||
|
#enable_tnt = <true in singleplayer, false in multiplayer>
|
||||||
|
|
||||||
|
# The radius of a TNT explosion
|
||||||
|
#tnt_radius = 3
|
||||||
|
|
||||||
|
# Enable the stairs mod ABM that replaces the old 'upside down'
|
||||||
|
# stair and slab nodes in old maps with the new param2 versions.
|
||||||
|
#enable_stairs_replace_abm = false
|
||||||
|
|
||||||
|
# Whether you allow respawning in beds
|
||||||
|
# Default value is true
|
||||||
|
#enable_bed_respawn = true
|
||||||
|
|
||||||
|
# Whether players can skip night by sleeping
|
||||||
|
# Default value is true
|
||||||
|
#enable_bed_night_skip = true
|
8
kingdoms_game/mods/3d_armor-master/.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
## Generic ignorable patterns and files
|
||||||
|
*~
|
||||||
|
.*.swp
|
||||||
|
*bak*
|
||||||
|
tags
|
||||||
|
*.vim
|
||||||
|
armor.conf
|
||||||
|
|
24
kingdoms_game/mods/3d_armor-master/3d_armor/README.txt
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
[mod] Visible Player Armor [3d_armor]
|
||||||
|
=====================================
|
||||||
|
|
||||||
|
Depends: default
|
||||||
|
|
||||||
|
Recommends: inventory_plus or unified_inventory (use only one)
|
||||||
|
|
||||||
|
Adds craftable armor that is visible to other players. Each armor item worn contributes to
|
||||||
|
a player's armor group level making them less vulnerable to weapons.
|
||||||
|
|
||||||
|
Armor takes damage when a player is hurt but also offers a percentage chance of healing.
|
||||||
|
Overall level is boosted by 10% when wearing a full matching set.
|
||||||
|
|
||||||
|
Fire protection added by TenPlus1 when using crystal armor if Ethereal mod active, level 1
|
||||||
|
protects against torches, level 2 for crystal spike, level 3 for fire, level 5 for lava.
|
||||||
|
|
||||||
|
Configuration
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Armor can be configured by adding a file called armor.conf in 3d_armor mod and/or world directory.
|
||||||
|
see armor.conf.example for all available options.
|
||||||
|
|
||||||
|
Note: worldpath config settings override any settings made in the mod's directory.
|
||||||
|
|
45
kingdoms_game/mods/3d_armor-master/3d_armor/admin.lua
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
minetest.register_alias("adminboots","3d_armor:boots_admin")
|
||||||
|
minetest.register_alias("adminhelmet","3d_armor:helmet_admin")
|
||||||
|
minetest.register_alias("adminchestplate","3d_armor:chestplate_admin")
|
||||||
|
minetest.register_alias("adminlegginss","3d_armor:leggings_admin")
|
||||||
|
|
||||||
|
minetest.register_tool("3d_armor:helmet_admin", {
|
||||||
|
description = "Admin Helmet",
|
||||||
|
inventory_image = "3d_armor_inv_helmet_admin.png",
|
||||||
|
groups = {armor_head=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1},
|
||||||
|
wear = 0,
|
||||||
|
on_drop = function(itemstack, dropper, pos)
|
||||||
|
return
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_tool("3d_armor:chestplate_admin", {
|
||||||
|
description = "Admin Chestplate",
|
||||||
|
inventory_image = "3d_armor_inv_chestplate_admin.png",
|
||||||
|
groups = {armor_torso=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1},
|
||||||
|
wear = 0,
|
||||||
|
on_drop = function(itemstack, dropper, pos)
|
||||||
|
return
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_tool("3d_armor:leggings_admin", {
|
||||||
|
description = "Admin Leggings",
|
||||||
|
inventory_image = "3d_armor_inv_leggings_admin.png",
|
||||||
|
groups = {armor_legs=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1},
|
||||||
|
wear = 0,
|
||||||
|
on_drop = function(itemstack, dropper, pos)
|
||||||
|
return
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_tool("3d_armor:boots_admin", {
|
||||||
|
description = "Admin Boots",
|
||||||
|
inventory_image = "3d_armor_inv_boots_admin.png",
|
||||||
|
groups = {armor_feet=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1},
|
||||||
|
wear = 0,
|
||||||
|
on_drop = function(itemstack, dropper, pos)
|
||||||
|
return
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
@ -0,0 +1,56 @@
|
|||||||
|
-- Armor Configuration (defaults)
|
||||||
|
|
||||||
|
-- You can remove any unwanted armor materials from this table.
|
||||||
|
-- Note that existing armor that is removed will show up as an unknown item.
|
||||||
|
ARMOR_MATERIALS = {
|
||||||
|
wood = "group:wood",
|
||||||
|
cactus = "default:cactus",
|
||||||
|
steel = "default:steel_ingot",
|
||||||
|
bronze = "default:bronze_ingot",
|
||||||
|
diamond = "default:diamond",
|
||||||
|
gold = "default:gold_ingot",
|
||||||
|
mithril = "moreores:mithril_ingot",
|
||||||
|
crystal = "ethereal:crystal_ingot",
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Enable fire protection (defaults true if using ethereal mod)
|
||||||
|
ARMOR_FIRE_PROTECT = false
|
||||||
|
|
||||||
|
-- Fire protection nodes, (name, protection level, damage)
|
||||||
|
ARMOR_FIRE_NODES = {
|
||||||
|
{"default:lava_source", 5, 4},
|
||||||
|
{"default:lava_flowing", 5, 4},
|
||||||
|
{"fire:basic_flame", 3, 4},
|
||||||
|
{"ethereal:crystal_spike", 2, 1},
|
||||||
|
{"bakedclay:safe_fire", 2, 1},
|
||||||
|
{"default:torch", 1, 1},
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Increase this if you get initialization glitches when a player first joins.
|
||||||
|
ARMOR_INIT_DELAY = 1
|
||||||
|
|
||||||
|
-- Number of initialization attempts.
|
||||||
|
-- Use in conjunction with ARMOR_INIT_DELAY if initialization problems persist.
|
||||||
|
ARMOR_INIT_TIMES = 1
|
||||||
|
|
||||||
|
-- Increase this if armor is not getting into bones due to server lag.
|
||||||
|
ARMOR_BONES_DELAY = 1
|
||||||
|
|
||||||
|
-- How often player armor/wield items are updated.
|
||||||
|
ARMOR_UPDATE_TIME = 1
|
||||||
|
|
||||||
|
-- Drop armor when a player dies.
|
||||||
|
-- Uses bones mod if present, otherwise items are dropped around the player.
|
||||||
|
ARMOR_DROP = true
|
||||||
|
|
||||||
|
-- Pulverise armor when a player dies, overrides ARMOR_DROP.
|
||||||
|
ARMOR_DESTROY = false
|
||||||
|
|
||||||
|
-- You can use this to increase or decrease overall armor effectiveness,
|
||||||
|
-- eg: ARMOR_LEVEL_MULTIPLIER = 0.5 will reduce armor level by half.
|
||||||
|
ARMOR_LEVEL_MULTIPLIER = 1
|
||||||
|
|
||||||
|
-- You can use this to increase or decrease overall armor healing,
|
||||||
|
-- eg: ARMOR_HEAL_MULTIPLIER = 0 will disable healing altogether.
|
||||||
|
ARMOR_HEAL_MULTIPLIER = 1
|
||||||
|
|
603
kingdoms_game/mods/3d_armor-master/3d_armor/armor.lua
Normal file
@ -0,0 +1,603 @@
|
|||||||
|
ARMOR_INIT_DELAY = 1
|
||||||
|
ARMOR_INIT_TIMES = 1
|
||||||
|
ARMOR_BONES_DELAY = 1
|
||||||
|
ARMOR_UPDATE_TIME = 1
|
||||||
|
ARMOR_DROP = minetest.get_modpath("bones") ~= nil
|
||||||
|
ARMOR_DESTROY = false
|
||||||
|
ARMOR_LEVEL_MULTIPLIER = 1
|
||||||
|
ARMOR_HEAL_MULTIPLIER = 1
|
||||||
|
ARMOR_MATERIALS = {
|
||||||
|
wood = "group:wood",
|
||||||
|
--cactus = "default:cactus",
|
||||||
|
steel = "default:steel_ingot",
|
||||||
|
bronze = "default:bronze_ingot",
|
||||||
|
--diamond = "default:diamond",
|
||||||
|
gold = "default:gold_ingot",
|
||||||
|
--mithril = "moreores:mithril_ingot",
|
||||||
|
--crystal = "ethereal:crystal_ingot",
|
||||||
|
}
|
||||||
|
ARMOR_FIRE_PROTECT = minetest.get_modpath("ethereal") ~= nil
|
||||||
|
ARMOR_FIRE_NODES = {
|
||||||
|
{"default:lava_source", 5, 4},
|
||||||
|
{"default:lava_flowing", 5, 4},
|
||||||
|
{"fire:basic_flame", 3, 4},
|
||||||
|
{"ethereal:crystal_spike", 2, 1},
|
||||||
|
{"bakedclay:safe_fire", 2, 1},
|
||||||
|
{"default:torch", 1, 1},
|
||||||
|
}
|
||||||
|
|
||||||
|
local skin_mod = nil
|
||||||
|
local inv_mod = nil
|
||||||
|
|
||||||
|
local modpath = minetest.get_modpath(ARMOR_MOD_NAME)
|
||||||
|
local worldpath = minetest.get_worldpath()
|
||||||
|
local input = io.open(modpath.."/armor.conf", "r")
|
||||||
|
if input then
|
||||||
|
dofile(modpath.."/armor.conf")
|
||||||
|
input:close()
|
||||||
|
input = nil
|
||||||
|
end
|
||||||
|
input = io.open(worldpath.."/armor.conf", "r")
|
||||||
|
if input then
|
||||||
|
dofile(worldpath.."/armor.conf")
|
||||||
|
input:close()
|
||||||
|
input = nil
|
||||||
|
end
|
||||||
|
if not minetest.get_modpath("moreores") then
|
||||||
|
ARMOR_MATERIALS.mithril = nil
|
||||||
|
end
|
||||||
|
if not minetest.get_modpath("ethereal") then
|
||||||
|
ARMOR_MATERIALS.crystal = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
armor = {
|
||||||
|
timer = 0,
|
||||||
|
elements = {"head", "torso", "legs", "feet"},
|
||||||
|
physics = {"jump","speed","gravity"},
|
||||||
|
formspec = "size[8,8.5]image[2,0.75;2,4;armor_preview]"
|
||||||
|
.."list[current_player;main;0,4.5;8,4;]"
|
||||||
|
.."list[current_player;craft;4,1;3,3;]"
|
||||||
|
.."list[current_player;craftpreview;7,2;1,1;]"
|
||||||
|
.."listring[current_player;main]"
|
||||||
|
.."listring[current_player;craft]",
|
||||||
|
textures = {},
|
||||||
|
default_skin = "character",
|
||||||
|
version = "0.4.5",
|
||||||
|
}
|
||||||
|
|
||||||
|
if minetest.get_modpath("inventory_plus") then
|
||||||
|
inv_mod = "inventory_plus"
|
||||||
|
armor.formspec = "size[8,8.5]button[0,0;2,0.5;main;Back]"
|
||||||
|
.."image[2.5,0.75;2,4;armor_preview]"
|
||||||
|
.."label[5,1;Level: armor_level]"
|
||||||
|
.."label[5,1.5;Heal: armor_heal]"
|
||||||
|
.."label[5,2;Fire: armor_fire]"
|
||||||
|
.."list[current_player;main;0,4.5;8,4;]"
|
||||||
|
if minetest.get_modpath("crafting") then
|
||||||
|
inventory_plus.get_formspec = function(player, page)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
elseif minetest.get_modpath("unified_inventory") then
|
||||||
|
inv_mod = "unified_inventory"
|
||||||
|
unified_inventory.register_button("armor", {
|
||||||
|
type = "image",
|
||||||
|
image = "inventory_plus_armor.png",
|
||||||
|
})
|
||||||
|
unified_inventory.register_page("armor", {
|
||||||
|
get_formspec = function(player, perplayer_formspec)
|
||||||
|
local fy = perplayer_formspec.formspec_y
|
||||||
|
local name = player:get_player_name()
|
||||||
|
local formspec = "background[0.06,"..fy..";7.92,7.52;3d_armor_ui_form.png]"
|
||||||
|
.."label[0,0;Armor]"
|
||||||
|
.."list[detached:"..name.."_armor;armor;0,"..fy..";2,3;]"
|
||||||
|
.."image[2.5,"..(fy - 0.25)..";2,4;"..armor.textures[name].preview.."]"
|
||||||
|
.."label[5.0,"..(fy + 0.0)..";Level: "..armor.def[name].level.."]"
|
||||||
|
.."label[5.0,"..(fy + 0.5)..";Heal: "..armor.def[name].heal.."]"
|
||||||
|
.."label[5.0,"..(fy + 1.0)..";Fire: "..armor.def[name].fire.."]"
|
||||||
|
.."listring[current_player;main]"
|
||||||
|
.."listring[detached:"..name.."_armor;armor]"
|
||||||
|
return {formspec=formspec}
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
elseif minetest.get_modpath("inventory_enhanced") then
|
||||||
|
inv_mod = "inventory_enhanced"
|
||||||
|
end
|
||||||
|
|
||||||
|
if minetest.get_modpath("skins") then
|
||||||
|
skin_mod = "skins"
|
||||||
|
elseif minetest.get_modpath("simple_skins") then
|
||||||
|
skin_mod = "simple_skins"
|
||||||
|
elseif minetest.get_modpath("u_skins") then
|
||||||
|
skin_mod = "u_skins"
|
||||||
|
elseif minetest.get_modpath("wardrobe") then
|
||||||
|
skin_mod = "wardrobe"
|
||||||
|
end
|
||||||
|
|
||||||
|
armor.def = {
|
||||||
|
state = 0,
|
||||||
|
count = 0,
|
||||||
|
}
|
||||||
|
|
||||||
|
--bloody player code
|
||||||
|
bloodskin = "blood_0.png"
|
||||||
|
minetest.register_on_player_hpchange(function(player, hp_change)
|
||||||
|
local hp = player:get_hp(player)
|
||||||
|
if hp <= 6 then
|
||||||
|
bloodskin = "blood_3.png"
|
||||||
|
elseif hp <= 10 then
|
||||||
|
bloodskin = "blood_2.png"
|
||||||
|
elseif hp <= 16 then
|
||||||
|
bloodskin = "blood_1.png"
|
||||||
|
elseif hp > 16 then
|
||||||
|
bloodskin = "blood_0.png"
|
||||||
|
end
|
||||||
|
armor:set_player_armor(player)
|
||||||
|
end)--]]
|
||||||
|
|
||||||
|
armor.update_player_visuals = function(self, player)
|
||||||
|
if not player then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local name = player:get_player_name()
|
||||||
|
if self.textures[name] then
|
||||||
|
default.player_set_textures(player, {
|
||||||
|
self.textures[name].skin.."^"..bloodskin,
|
||||||
|
self.textures[name].armor,
|
||||||
|
self.textures[name].wielditem,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
armor.set_player_armor = function(self, player)
|
||||||
|
local name, player_inv = armor:get_valid_player(player, "[set_player_armor]")
|
||||||
|
if not name then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local armor_texture = "3d_armor_trans.png"
|
||||||
|
local armor_level = 0
|
||||||
|
local armor_heal = 0
|
||||||
|
local armor_fire = 0
|
||||||
|
local state = 0
|
||||||
|
local items = 0
|
||||||
|
local elements = {}
|
||||||
|
local textures = {}
|
||||||
|
local physics_o = {speed=1,gravity=1,jump=1}
|
||||||
|
local material = {type=nil, count=1}
|
||||||
|
local preview = armor:get_preview(name) or "character_preview.png"
|
||||||
|
for _,v in ipairs(self.elements) do
|
||||||
|
elements[v] = false
|
||||||
|
end
|
||||||
|
for i=1, 6 do
|
||||||
|
local stack = player_inv:get_stack("armor", i)
|
||||||
|
local item = stack:get_name()
|
||||||
|
if stack:get_count() == 1 then
|
||||||
|
local def = stack:get_definition()
|
||||||
|
for k, v in pairs(elements) do
|
||||||
|
if v == false then
|
||||||
|
local level = def.groups["armor_"..k]
|
||||||
|
if level then
|
||||||
|
local texture = def.texture or item:gsub("%:", "_")
|
||||||
|
table.insert(textures, texture..".png")
|
||||||
|
preview = preview.."^"..texture.."_preview.png"
|
||||||
|
armor_level = armor_level + level
|
||||||
|
state = state + stack:get_wear()
|
||||||
|
items = items + 1
|
||||||
|
local heal = def.groups["armor_heal"] or 0
|
||||||
|
armor_heal = armor_heal + heal
|
||||||
|
local fire = def.groups["armor_fire"] or 0
|
||||||
|
armor_fire = armor_fire + fire
|
||||||
|
for kk,vv in ipairs(self.physics) do
|
||||||
|
local o_value = def.groups["physics_"..vv]
|
||||||
|
if o_value then
|
||||||
|
physics_o[vv] = physics_o[vv] + o_value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local mat = string.match(item, "%:.+_(.+)$")
|
||||||
|
if material.type then
|
||||||
|
if material.type == mat then
|
||||||
|
material.count = material.count + 1
|
||||||
|
end
|
||||||
|
else
|
||||||
|
material.type = mat
|
||||||
|
end
|
||||||
|
elements[k] = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if minetest.get_modpath("shields") then
|
||||||
|
armor_level = armor_level * 0.9
|
||||||
|
end
|
||||||
|
if material.type and material.count == #self.elements then
|
||||||
|
armor_level = armor_level * 1.1
|
||||||
|
end
|
||||||
|
armor_level = armor_level * ARMOR_LEVEL_MULTIPLIER
|
||||||
|
armor_heal = armor_heal * ARMOR_HEAL_MULTIPLIER
|
||||||
|
if #textures > 0 then
|
||||||
|
armor_texture = table.concat(textures, "^")
|
||||||
|
end
|
||||||
|
local armor_groups = {fleshy=100}
|
||||||
|
if armor_level > 0 then
|
||||||
|
armor_groups.level = math.floor(armor_level / 20)
|
||||||
|
armor_groups.fleshy = 100 - armor_level
|
||||||
|
end
|
||||||
|
player:set_armor_groups(armor_groups)
|
||||||
|
player:set_physics_override(physics_o)
|
||||||
|
self.textures[name].armor = armor_texture
|
||||||
|
self.textures[name].preview = preview
|
||||||
|
self.def[name].state = state
|
||||||
|
self.def[name].count = items
|
||||||
|
self.def[name].level = armor_level
|
||||||
|
self.def[name].heal = armor_heal
|
||||||
|
self.def[name].jump = physics_o.jump
|
||||||
|
self.def[name].speed = physics_o.speed
|
||||||
|
self.def[name].gravity = physics_o.gravity
|
||||||
|
self.def[name].fire = armor_fire
|
||||||
|
self:update_player_visuals(player)
|
||||||
|
end
|
||||||
|
|
||||||
|
armor.update_armor = function(self, player)
|
||||||
|
-- Legacy support: Called when armor levels are changed
|
||||||
|
-- Other mods can hook on to this function, see hud mod for example
|
||||||
|
end
|
||||||
|
|
||||||
|
armor.get_player_skin = function(self, name)
|
||||||
|
local skin = nil
|
||||||
|
if skin_mod == "skins" or skin_mod == "simple_skins" then
|
||||||
|
skin = skins.skins[name]
|
||||||
|
elseif skin_mod == "u_skins" then
|
||||||
|
skin = u_skins.u_skins[name]
|
||||||
|
elseif skin_mod == "wardrobe" then
|
||||||
|
skin = string.gsub(wardrobe.playerSkins[name], "%.png$","")
|
||||||
|
end
|
||||||
|
return skin or armor.default_skin
|
||||||
|
end
|
||||||
|
|
||||||
|
armor.get_preview = function(self, name)
|
||||||
|
if skin_mod == "skins" then
|
||||||
|
return armor:get_player_skin(name).."_preview.png"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
armor.get_armor_formspec = function(self, name)
|
||||||
|
if not armor.textures[name] then
|
||||||
|
minetest.log("error", "3d_armor: Player texture["..name.."] is nil [get_armor_formspec]")
|
||||||
|
return ""
|
||||||
|
end
|
||||||
|
if not armor.def[name] then
|
||||||
|
minetest.log("error", "3d_armor: Armor def["..name.."] is nil [get_armor_formspec]")
|
||||||
|
return ""
|
||||||
|
end
|
||||||
|
local formspec = armor.formspec.."list[detached:"..name.."_armor;armor;0,1;2,3;]"
|
||||||
|
formspec = formspec:gsub("armor_preview", armor.textures[name].preview)
|
||||||
|
formspec = formspec:gsub("armor_level", armor.def[name].level)
|
||||||
|
formspec = formspec:gsub("armor_heal", armor.def[name].heal)
|
||||||
|
formspec = formspec:gsub("armor_fire", armor.def[name].fire)
|
||||||
|
return formspec
|
||||||
|
end
|
||||||
|
|
||||||
|
armor.update_inventory = function(self, player)
|
||||||
|
local name = armor:get_valid_player(player, "[set_player_armor]")
|
||||||
|
if not name or inv_mod == "inventory_enhanced" then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if inv_mod == "unified_inventory" then
|
||||||
|
if unified_inventory.current_page[name] == "armor" then
|
||||||
|
unified_inventory.set_inventory_formspec(player, "armor")
|
||||||
|
end
|
||||||
|
else
|
||||||
|
local formspec = armor:get_armor_formspec(name)
|
||||||
|
if inv_mod == "inventory_plus" then
|
||||||
|
formspec = formspec.."listring[current_player;main]"
|
||||||
|
.."listring[detached:"..name.."_armor;armor]"
|
||||||
|
local page = player:get_inventory_formspec()
|
||||||
|
if page:find("detached:"..name.."_armor") then
|
||||||
|
inventory_plus.set_inventory_formspec(player, formspec)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
player:set_inventory_formspec(formspec)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
armor.get_valid_player = function(self, player, msg)
|
||||||
|
msg = msg or ""
|
||||||
|
if not player then
|
||||||
|
minetest.log("error", "3d_armor: Player reference is nil "..msg)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local name = player:get_player_name()
|
||||||
|
if not name then
|
||||||
|
minetest.log("error", "3d_armor: Player name is nil "..msg)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local pos = player:getpos()
|
||||||
|
local player_inv = player:get_inventory()
|
||||||
|
local armor_inv = minetest.get_inventory({type="detached", name=name.."_armor"})
|
||||||
|
if not pos then
|
||||||
|
minetest.log("error", "3d_armor: Player position is nil "..msg)
|
||||||
|
return
|
||||||
|
elseif not player_inv then
|
||||||
|
minetest.log("error", "3d_armor: Player inventory is nil "..msg)
|
||||||
|
return
|
||||||
|
elseif not armor_inv then
|
||||||
|
minetest.log("error", "3d_armor: Detached armor inventory is nil "..msg)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
return name, player_inv, armor_inv, pos
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Register Player Model
|
||||||
|
|
||||||
|
default.player_register_model("3d_armor_character.b3d", {
|
||||||
|
animation_speed = 30,
|
||||||
|
textures = {
|
||||||
|
armor.default_skin..".png",
|
||||||
|
"3d_armor_trans.png",
|
||||||
|
"3d_armor_trans.png",
|
||||||
|
},
|
||||||
|
animations = {
|
||||||
|
stand = {x=0, y=79},
|
||||||
|
lay = {x=162, y=166},
|
||||||
|
walk = {x=168, y=187},
|
||||||
|
mine = {x=189, y=198},
|
||||||
|
walk_mine = {x=200, y=219},
|
||||||
|
sit = {x=81, y=160},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Register Callbacks
|
||||||
|
|
||||||
|
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
|
local name = armor:get_valid_player(player, "[on_player_receive_fields]")
|
||||||
|
if not name or inv_mod == "inventory_enhanced" then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if inv_mod == "inventory_plus" and fields.armor then
|
||||||
|
local formspec = armor:get_armor_formspec(name)
|
||||||
|
inventory_plus.set_inventory_formspec(player, formspec)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
for field, _ in pairs(fields) do
|
||||||
|
if string.find(field, "skins_set") then
|
||||||
|
minetest.after(0, function(player)
|
||||||
|
local skin = armor:get_player_skin(name)
|
||||||
|
armor.textures[name].skin = skin..".png"
|
||||||
|
armor:set_player_armor(player)
|
||||||
|
end, player)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
minetest.register_on_joinplayer(function(player)
|
||||||
|
default.player_set_model(player, "3d_armor_character.b3d")
|
||||||
|
local name = player:get_player_name()
|
||||||
|
local player_inv = player:get_inventory()
|
||||||
|
local armor_inv = minetest.create_detached_inventory(name.."_armor", {
|
||||||
|
on_put = function(inv, listname, index, stack, player)
|
||||||
|
player:get_inventory():set_stack(listname, index, stack)
|
||||||
|
armor:set_player_armor(player)
|
||||||
|
armor:update_inventory(player)
|
||||||
|
end,
|
||||||
|
on_take = function(inv, listname, index, stack, player)
|
||||||
|
player:get_inventory():set_stack(listname, index, nil)
|
||||||
|
armor:set_player_armor(player)
|
||||||
|
armor:update_inventory(player)
|
||||||
|
end,
|
||||||
|
on_move = function(inv, from_list, from_index, to_list, to_index, count, player)
|
||||||
|
local plaver_inv = player:get_inventory()
|
||||||
|
local stack = inv:get_stack(to_list, to_index)
|
||||||
|
player_inv:set_stack(to_list, to_index, stack)
|
||||||
|
player_inv:set_stack(from_list, from_index, nil)
|
||||||
|
armor:set_player_armor(player)
|
||||||
|
armor:update_inventory(player)
|
||||||
|
end,
|
||||||
|
allow_put = function(inv, listname, index, stack, player)
|
||||||
|
return 1
|
||||||
|
end,
|
||||||
|
allow_take = function(inv, listname, index, stack, player)
|
||||||
|
return stack:get_count()
|
||||||
|
end,
|
||||||
|
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
|
||||||
|
return count
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
if inv_mod == "inventory_plus" then
|
||||||
|
inventory_plus.register_button(player,"armor", "Armor")
|
||||||
|
end
|
||||||
|
armor_inv:set_size("armor", 6)
|
||||||
|
player_inv:set_size("armor", 6)
|
||||||
|
for i=1, 6 do
|
||||||
|
local stack = player_inv:get_stack("armor", i)
|
||||||
|
armor_inv:set_stack("armor", i, stack)
|
||||||
|
end
|
||||||
|
armor.def[name] = {
|
||||||
|
state = 0,
|
||||||
|
count = 0,
|
||||||
|
level = 0,
|
||||||
|
heal = 0,
|
||||||
|
jump = 1,
|
||||||
|
speed = 1,
|
||||||
|
gravity = 1,
|
||||||
|
fire = 0,
|
||||||
|
}
|
||||||
|
armor.textures[name] = {
|
||||||
|
skin = armor.default_skin..".png",
|
||||||
|
armor = "3d_armor_trans.png",
|
||||||
|
wielditem = "3d_armor_trans.png",
|
||||||
|
preview = armor.default_skin.."_preview.png",
|
||||||
|
}
|
||||||
|
if skin_mod == "skins" then
|
||||||
|
local skin = skins.skins[name]
|
||||||
|
if skin and skins.get_type(skin) == skins.type.MODEL then
|
||||||
|
armor.textures[name].skin = skin..".png"
|
||||||
|
end
|
||||||
|
elseif skin_mod == "simple_skins" then
|
||||||
|
local skin = skins.skins[name]
|
||||||
|
if skin then
|
||||||
|
armor.textures[name].skin = skin..".png"
|
||||||
|
end
|
||||||
|
elseif skin_mod == "u_skins" then
|
||||||
|
local skin = u_skins.u_skins[name]
|
||||||
|
if skin and u_skins.get_type(skin) == u_skins.type.MODEL then
|
||||||
|
armor.textures[name].skin = skin..".png"
|
||||||
|
end
|
||||||
|
elseif skin_mod == "wardrobe" then
|
||||||
|
local skin = wardrobe.playerSkins[name]
|
||||||
|
if skin then
|
||||||
|
armor.textures[name].skin = skin
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if minetest.get_modpath("player_textures") then
|
||||||
|
local filename = minetest.get_modpath("player_textures").."/textures/player_"..name
|
||||||
|
local f = io.open(filename..".png")
|
||||||
|
if f then
|
||||||
|
f:close()
|
||||||
|
armor.textures[name].skin = "player_"..name..".png"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for i=1, ARMOR_INIT_TIMES do
|
||||||
|
minetest.after(ARMOR_INIT_DELAY * i, function(player)
|
||||||
|
armor:set_player_armor(player)
|
||||||
|
if not inv_mod then
|
||||||
|
armor:update_inventory(player)
|
||||||
|
end
|
||||||
|
end, player)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
if ARMOR_DROP == true or ARMOR_DESTROY == true then
|
||||||
|
armor.drop_armor = function(pos, stack)
|
||||||
|
local obj = minetest.add_item(pos, stack)
|
||||||
|
if obj then
|
||||||
|
obj:setvelocity({x=math.random(-1, 1), y=5, z=math.random(-1, 1)})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
minetest.register_on_dieplayer(function(player)
|
||||||
|
local name, player_inv, armor_inv, pos = armor:get_valid_player(player, "[on_dieplayer]")
|
||||||
|
if not name then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local drop = {}
|
||||||
|
for i=1, player_inv:get_size("armor") do
|
||||||
|
local stack = armor_inv:get_stack("armor", i)
|
||||||
|
if stack:get_count() > 0 then
|
||||||
|
table.insert(drop, stack)
|
||||||
|
armor_inv:set_stack("armor", i, nil)
|
||||||
|
player_inv:set_stack("armor", i, nil)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
armor:set_player_armor(player)
|
||||||
|
if inv_mod == "unified_inventory" then
|
||||||
|
unified_inventory.set_inventory_formspec(player, "craft")
|
||||||
|
elseif inv_mod == "inventory_plus" then
|
||||||
|
local formspec = inventory_plus.get_formspec(player,"main")
|
||||||
|
inventory_plus.set_inventory_formspec(player, formspec)
|
||||||
|
else
|
||||||
|
armor:update_inventory(player)
|
||||||
|
end
|
||||||
|
if ARMOR_DESTROY == false then
|
||||||
|
minetest.after(ARMOR_BONES_DELAY, function()
|
||||||
|
local node = minetest.get_node(vector.round(pos))
|
||||||
|
if node then
|
||||||
|
if node.name == "bones:bones" then
|
||||||
|
local meta = minetest.get_meta(vector.round(pos))
|
||||||
|
local owner = meta:get_string("owner")
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
for _,stack in ipairs(drop) do
|
||||||
|
if name == owner and inv:room_for_item("main", stack) then
|
||||||
|
inv:add_item("main", stack)
|
||||||
|
else
|
||||||
|
armor.drop_armor(pos, stack)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
for _,stack in ipairs(drop) do
|
||||||
|
armor.drop_armor(pos, stack)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_on_player_hpchange(function(player, hp_change)
|
||||||
|
local name, player_inv, armor_inv = armor:get_valid_player(player, "[on_hpchange]")
|
||||||
|
if name and hp_change < 0 then
|
||||||
|
local heal_max = 0
|
||||||
|
local state = 0
|
||||||
|
local items = 0
|
||||||
|
for i=1, 6 do
|
||||||
|
local stack = player_inv:get_stack("armor", i)
|
||||||
|
if stack:get_count() > 0 then
|
||||||
|
local use = stack:get_definition().groups["armor_use"] or 0
|
||||||
|
local heal = stack:get_definition().groups["armor_heal"] or 0
|
||||||
|
local item = stack:get_name()
|
||||||
|
stack:add_wear(use)
|
||||||
|
armor_inv:set_stack("armor", i, stack)
|
||||||
|
player_inv:set_stack("armor", i, stack)
|
||||||
|
state = state + stack:get_wear()
|
||||||
|
items = items + 1
|
||||||
|
if stack:get_count() == 0 then
|
||||||
|
local desc = minetest.registered_items[item].description
|
||||||
|
if desc then
|
||||||
|
minetest.chat_send_player(name, "Your "..desc.." got destroyed!")
|
||||||
|
end
|
||||||
|
armor:set_player_armor(player)
|
||||||
|
armor:update_inventory(player)
|
||||||
|
end
|
||||||
|
heal_max = heal_max + heal
|
||||||
|
end
|
||||||
|
end
|
||||||
|
armor.def[name].state = state
|
||||||
|
armor.def[name].count = items
|
||||||
|
heal_max = heal_max * ARMOR_HEAL_MULTIPLIER
|
||||||
|
if heal_max > math.random(100) then
|
||||||
|
hp_change = 0
|
||||||
|
end
|
||||||
|
armor:update_armor(player)
|
||||||
|
end
|
||||||
|
return hp_change
|
||||||
|
end, true)
|
||||||
|
|
||||||
|
-- Fire Protection, added by TenPlus1
|
||||||
|
|
||||||
|
if ARMOR_FIRE_PROTECT == true then
|
||||||
|
-- override hot nodes so they do not hurt player anywhere but mod
|
||||||
|
for _, row in ipairs(ARMOR_FIRE_NODES) do
|
||||||
|
if minetest.registered_nodes[row[1]] then
|
||||||
|
minetest.override_item(row[1], {damage_per_second = 0})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
minetest.register_globalstep(function(dtime)
|
||||||
|
armor.timer = armor.timer + dtime
|
||||||
|
if armor.timer > ARMOR_UPDATE_TIME then
|
||||||
|
for _,player in ipairs(minetest.get_connected_players()) do
|
||||||
|
local name = player:get_player_name()
|
||||||
|
local pos = player:getpos()
|
||||||
|
local hp = player:get_hp()
|
||||||
|
if name and pos and hp then
|
||||||
|
pos.y = pos.y + 1.4 -- head level
|
||||||
|
local node_head = minetest.get_node(pos).name
|
||||||
|
pos.y = pos.y - 1.2 -- feet level
|
||||||
|
local node_feet = minetest.get_node(pos).name
|
||||||
|
-- is player inside a hot node?
|
||||||
|
for _, row in ipairs(ARMOR_FIRE_NODES) do
|
||||||
|
-- check fire protection, if not enough then get hurt
|
||||||
|
if row[1] == node_head or row[1] == node_feet then
|
||||||
|
if hp > 0 and armor.def[name].fire < row[2] then
|
||||||
|
hp = hp - row[3] * ARMOR_UPDATE_TIME
|
||||||
|
player:set_hp(hp)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
armor.timer = 0
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,79 @@
|
|||||||
|
3d_armor -- Crafting Guide
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
Helmets:
|
||||||
|
|
||||||
|
+---+---+---+
|
||||||
|
| X | X | X |
|
||||||
|
+---+---+---+
|
||||||
|
| X | | X |
|
||||||
|
+---+---+---+
|
||||||
|
| | | |
|
||||||
|
+---+---+---+
|
||||||
|
|
||||||
|
[3d_armor:helmet_wood] X = [default:wood]
|
||||||
|
[3d_armor:helmet_cactus] X = [default:cactus]
|
||||||
|
[3d_armor:helmet_steel] X = [default:steel_ingot]
|
||||||
|
[3d_armor:helmet_bronze] X = [default:bronze_ingot]
|
||||||
|
[3d_armor:helmet_diamond] X = [default:diamond]
|
||||||
|
[3d_armor:helmet_gold] X = [default:gold_ingot]
|
||||||
|
[3d_armor:helmet_mithril] X = [moreores:mithril_ingot] *
|
||||||
|
[3d_armor:helmet_crystal] X = [ethereal:crystal_ingot] **
|
||||||
|
|
||||||
|
Chestplates:
|
||||||
|
|
||||||
|
+---+---+---+
|
||||||
|
| X | | X |
|
||||||
|
+---+---+---+
|
||||||
|
| X | X | X |
|
||||||
|
+---+---+---+
|
||||||
|
| X | X | X |
|
||||||
|
+---+---+---+
|
||||||
|
|
||||||
|
[3d_armor:chestplate_wood] X = [default:wood]
|
||||||
|
[3d_armor:chestplate_cactus] X = [default:cactus]
|
||||||
|
[3d_armor:chestplate_steel] X = [default:steel_ingot]
|
||||||
|
[3d_armor:chestplate_bronze] X = [default:bronze_ingot]
|
||||||
|
[3d_armor:chestplate_diamond] X = [default:diamond]
|
||||||
|
[3d_armor:chestplate_gold] X = [default:gold_ingot]
|
||||||
|
[3d_armor:chestplate_mithril] X = [moreores:mithril_ingot] *
|
||||||
|
[3d_armor:chestplate_crystal] X = [ethereal:crystal_ingot] **
|
||||||
|
|
||||||
|
Leggings:
|
||||||
|
|
||||||
|
+---+---+---+
|
||||||
|
| X | X | X |
|
||||||
|
+---+---+---+
|
||||||
|
| X | | X |
|
||||||
|
+---+---+---+
|
||||||
|
| X | | X |
|
||||||
|
+---+---+---+
|
||||||
|
|
||||||
|
[3d_armor:leggings_wood] X = [default:wood]
|
||||||
|
[3d_armor:leggings_cactus] X = [default:cactus]
|
||||||
|
[3d_armor:leggings_steel] X = [default:steel_ingot]
|
||||||
|
[3d_armor:leggings_bronze] X = [default:bronze_ingot]
|
||||||
|
[3d_armor:leggings_diamond] X = [default:diamond]
|
||||||
|
[3d_armor:leggings_gold] X = [default:gold_ingot]
|
||||||
|
[3d_armor:leggings_mithril] X = [moreores:mithril_ingot] *
|
||||||
|
[3d_armor:leggings_crystal] X = [ethereal:crystal_ingot] **
|
||||||
|
|
||||||
|
Boots:
|
||||||
|
|
||||||
|
+---+---+---+
|
||||||
|
| X | | X |
|
||||||
|
+---+---+---+
|
||||||
|
| X | | X |
|
||||||
|
+---+---+---+
|
||||||
|
|
||||||
|
[3d_armor:boots_wood] X = [default:wood]
|
||||||
|
[3d_armor:boots_cactus] X = [default:cactus]
|
||||||
|
[3d_armor:boots_steel] X = [default:steel_ingot]
|
||||||
|
[3d_armor:boots_bronze] X = [default:bronze_ingot
|
||||||
|
[3d_armor:boots_diamond] X = [default:diamond]
|
||||||
|
[3d_armor:boots_gold] X = [default:gold_ingot]
|
||||||
|
[3d_armor:boots_mithril] X = [moreores:mithril_ingot] *
|
||||||
|
[3d_armor:boots_crystal] X = [ethereal:crystal_ingot] **
|
||||||
|
|
||||||
|
* Requires moreores mod by Calinou - https://forum.minetest.net/viewtopic.php?id=549
|
||||||
|
** Requires ethereal mod by Chinchow & TenPlus1 - https://github.com/tenplus1/ethereal
|
6
kingdoms_game/mods/3d_armor-master/3d_armor/depends.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
default
|
||||||
|
inventory_plus?
|
||||||
|
unified_inventory?
|
||||||
|
fire?
|
||||||
|
ethereal?
|
||||||
|
bakedclay?
|
281
kingdoms_game/mods/3d_armor-master/3d_armor/init.lua
Normal file
@ -0,0 +1,281 @@
|
|||||||
|
ARMOR_MOD_NAME = minetest.get_current_modname()
|
||||||
|
dofile(minetest.get_modpath(ARMOR_MOD_NAME).."/armor.lua")
|
||||||
|
dofile(minetest.get_modpath(ARMOR_MOD_NAME).."/admin.lua")
|
||||||
|
|
||||||
|
if ARMOR_MATERIALS.wood then
|
||||||
|
minetest.register_tool("3d_armor:helmet_wood", {
|
||||||
|
description = "Wood Helmet",
|
||||||
|
inventory_image = "3d_armor_inv_helmet_wood.png",
|
||||||
|
groups = {armor_head=5, armor_heal=0, armor_use=2000},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:chestplate_wood", {
|
||||||
|
description = "Wood Chestplate",
|
||||||
|
inventory_image = "3d_armor_inv_chestplate_wood.png",
|
||||||
|
groups = {armor_torso=10, armor_heal=0, armor_use=2000},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:leggings_wood", {
|
||||||
|
description = "Wood Leggings",
|
||||||
|
inventory_image = "3d_armor_inv_leggings_wood.png",
|
||||||
|
groups = {armor_legs=5, armor_heal=0, armor_use=2000},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:boots_wood", {
|
||||||
|
description = "Wood Boots",
|
||||||
|
inventory_image = "3d_armor_inv_boots_wood.png",
|
||||||
|
groups = {armor_feet=5, armor_heal=0, armor_use=2000},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
if ARMOR_MATERIALS.cactus then
|
||||||
|
minetest.register_tool("3d_armor:helmet_cactus", {
|
||||||
|
description = "Cactuc Helmet",
|
||||||
|
inventory_image = "3d_armor_inv_helmet_cactus.png",
|
||||||
|
groups = {armor_head=5, armor_heal=0, armor_use=1000},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:chestplate_cactus", {
|
||||||
|
description = "Cactus Chestplate",
|
||||||
|
inventory_image = "3d_armor_inv_chestplate_cactus.png",
|
||||||
|
groups = {armor_torso=10, armor_heal=0, armor_use=1000},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:leggings_cactus", {
|
||||||
|
description = "Cactus Leggings",
|
||||||
|
inventory_image = "3d_armor_inv_leggings_cactus.png",
|
||||||
|
groups = {armor_legs=5, armor_heal=0, armor_use=1000},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:boots_cactus", {
|
||||||
|
description = "Cactus Boots",
|
||||||
|
inventory_image = "3d_armor_inv_boots_cactus.png",
|
||||||
|
groups = {armor_feet=5, armor_heal=0, armor_use=2000},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
if ARMOR_MATERIALS.steel then
|
||||||
|
minetest.register_tool("3d_armor:helmet_steel", {
|
||||||
|
description = "Steel Helmet",
|
||||||
|
inventory_image = "3d_armor_inv_helmet_steel.png",
|
||||||
|
groups = {armor_head=10, armor_heal=0, armor_use=500, physics_speed=-0.05},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:chestplate_steel", {
|
||||||
|
description = "Steel Chestplate",
|
||||||
|
inventory_image = "3d_armor_inv_chestplate_steel.png",
|
||||||
|
groups = {armor_torso=15, armor_heal=0, armor_use=500, physics_speed=-0.1},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:leggings_steel", {
|
||||||
|
description = "Steel Leggings",
|
||||||
|
inventory_image = "3d_armor_inv_leggings_steel.png",
|
||||||
|
groups = {armor_legs=15, armor_heal=0, armor_use=500, physics_speed=-0.1},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:boots_steel", {
|
||||||
|
description = "Steel Boots",
|
||||||
|
inventory_image = "3d_armor_inv_boots_steel.png",
|
||||||
|
groups = {armor_feet=10, armor_heal=0, armor_use=500, physics_speed=-0.05},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
if ARMOR_MATERIALS.bronze then
|
||||||
|
minetest.register_tool("3d_armor:helmet_bronze", {
|
||||||
|
description = "Bronze Helmet",
|
||||||
|
inventory_image = "3d_armor_inv_helmet_bronze.png",
|
||||||
|
groups = {armor_head=10, armor_heal=2, armor_use=250, physics_speed=-0.06},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:chestplate_bronze", {
|
||||||
|
description = "Bronze Chestplate",
|
||||||
|
inventory_image = "3d_armor_inv_chestplate_bronze.png",
|
||||||
|
groups = {armor_torso=15, armor_heal=2, armor_use=250, physics_speed=-0.11},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:leggings_bronze", {
|
||||||
|
description = "Bronze Leggings",
|
||||||
|
inventory_image = "3d_armor_inv_leggings_bronze.png",
|
||||||
|
groups = {armor_legs=15, armor_heal=2, armor_use=250, physics_speed=-0.11},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:boots_bronze", {
|
||||||
|
description = "Bronze Boots",
|
||||||
|
inventory_image = "3d_armor_inv_boots_bronze.png",
|
||||||
|
groups = {armor_feet=10, armor_heal=2, armor_use=250, physics_speed=-0.06},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
if ARMOR_MATERIALS.diamond then
|
||||||
|
minetest.register_tool("3d_armor:helmet_diamond", {
|
||||||
|
description = "Diamond Helmet",
|
||||||
|
inventory_image = "3d_armor_inv_helmet_diamond.png",
|
||||||
|
groups = {armor_head=15, armor_heal=12, armor_use=100},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:chestplate_diamond", {
|
||||||
|
description = "Diamond Chestplate",
|
||||||
|
inventory_image = "3d_armor_inv_chestplate_diamond.png",
|
||||||
|
groups = {armor_torso=20, armor_heal=12, armor_use=100},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:leggings_diamond", {
|
||||||
|
description = "Diamond Leggings",
|
||||||
|
inventory_image = "3d_armor_inv_leggings_diamond.png",
|
||||||
|
groups = {armor_legs=20, armor_heal=12, armor_use=100},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:boots_diamond", {
|
||||||
|
description = "Diamond Boots",
|
||||||
|
inventory_image = "3d_armor_inv_boots_diamond.png",
|
||||||
|
groups = {armor_feet=15, armor_heal=12, armor_use=100},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
if ARMOR_MATERIALS.gold then
|
||||||
|
minetest.register_tool("3d_armor:helmet_gold", {
|
||||||
|
description = "Gold Helmet",
|
||||||
|
inventory_image = "3d_armor_inv_helmet_gold.png",
|
||||||
|
groups = {armor_head=10, armor_heal=4, armor_use=250, physics_speed=-0.1},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:chestplate_gold", {
|
||||||
|
description = "Gold Chestplate",
|
||||||
|
inventory_image = "3d_armor_inv_chestplate_gold.png",
|
||||||
|
groups = {armor_torso=15, armor_heal=4, armor_use=250, physics_speed=-0.15},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:leggings_gold", {
|
||||||
|
description = "Gold Leggings",
|
||||||
|
inventory_image = "3d_armor_inv_leggings_gold.png",
|
||||||
|
groups = {armor_legs=15, armor_heal=4, armor_use=250, physics_speed=-0.15},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:boots_gold", {
|
||||||
|
description = "Gold Boots",
|
||||||
|
inventory_image = "3d_armor_inv_boots_gold.png",
|
||||||
|
groups = {armor_feet=10, armor_heal=4, armor_use=250, physics_speed=-0.1},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
if ARMOR_MATERIALS.mithril then
|
||||||
|
minetest.register_tool("3d_armor:helmet_mithril", {
|
||||||
|
description = "Mithril Helmet",
|
||||||
|
inventory_image = "3d_armor_inv_helmet_mithril.png",
|
||||||
|
groups = {armor_head=15, armor_heal=12, armor_use=50},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:chestplate_mithril", {
|
||||||
|
description = "Mithril Chestplate",
|
||||||
|
inventory_image = "3d_armor_inv_chestplate_mithril.png",
|
||||||
|
groups = {armor_torso=20, armor_heal=12, armor_use=50},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:leggings_mithril", {
|
||||||
|
description = "Mithril Leggings",
|
||||||
|
inventory_image = "3d_armor_inv_leggings_mithril.png",
|
||||||
|
groups = {armor_legs=20, armor_heal=12, armor_use=50},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:boots_mithril", {
|
||||||
|
description = "Mithril Boots",
|
||||||
|
inventory_image = "3d_armor_inv_boots_mithril.png",
|
||||||
|
groups = {armor_feet=15, armor_heal=12, armor_use=50},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
if ARMOR_MATERIALS.crystal then
|
||||||
|
minetest.register_tool("3d_armor:helmet_crystal", {
|
||||||
|
description = "Crystal Helmet",
|
||||||
|
inventory_image = "3d_armor_inv_helmet_crystal.png",
|
||||||
|
groups = {armor_head=15, armor_heal=12, armor_use=50, armor_fire=1},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:chestplate_crystal", {
|
||||||
|
description = "Crystal Chestplate",
|
||||||
|
inventory_image = "3d_armor_inv_chestplate_crystal.png",
|
||||||
|
groups = {armor_torso=20, armor_heal=12, armor_use=50, armor_fire=1},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:leggings_crystal", {
|
||||||
|
description = "Crystal Leggings",
|
||||||
|
inventory_image = "3d_armor_inv_leggings_crystal.png",
|
||||||
|
groups = {armor_legs=20, armor_heal=12, armor_use=50, armor_fire=1},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
minetest.register_tool("3d_armor:boots_crystal", {
|
||||||
|
description = "Crystal Boots",
|
||||||
|
inventory_image = "3d_armor_inv_boots_crystal.png",
|
||||||
|
groups = {armor_feet=15, armor_heal=12, armor_use=50, physics_speed=1, physics_jump=0.5, armor_fire=1},
|
||||||
|
wear = 0,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
for k, v in pairs(ARMOR_MATERIALS) do
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "3d_armor:helmet_"..k,
|
||||||
|
recipe = {
|
||||||
|
{v, v, v},
|
||||||
|
{v, "", v},
|
||||||
|
{"", "", ""},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "3d_armor:chestplate_"..k,
|
||||||
|
recipe = {
|
||||||
|
{v, "", v},
|
||||||
|
{v, v, v},
|
||||||
|
{v, v, v},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "3d_armor:leggings_"..k,
|
||||||
|
recipe = {
|
||||||
|
{v, v, v},
|
||||||
|
{v, "", v},
|
||||||
|
{v, "", v},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "3d_armor:boots_"..k,
|
||||||
|
recipe = {
|
||||||
|
{v, "", v},
|
||||||
|
{v, "", v},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
--MELTING DOWN
|
||||||
|
if v ~= "group:wood" then
|
||||||
|
minetest.register_craft({
|
||||||
|
output = v .. " 5",
|
||||||
|
type = "cooking",
|
||||||
|
cooktime = 14,
|
||||||
|
recipe = "3d_armor:helmet_"..k
|
||||||
|
})
|
||||||
|
minetest.register_craft({
|
||||||
|
output = v .. " 8",
|
||||||
|
type = "cooking",
|
||||||
|
cooktime = 14,
|
||||||
|
recipe = "3d_armor:chestplate_"..k
|
||||||
|
})
|
||||||
|
minetest.register_craft({
|
||||||
|
output = v .. " 7",
|
||||||
|
type = "cooking",
|
||||||
|
cooktime = 14,
|
||||||
|
recipe = "3d_armor:leggings_"..k
|
||||||
|
})
|
||||||
|
minetest.register_craft({
|
||||||
|
output = v .. " 4",
|
||||||
|
type = "cooking",
|
||||||
|
cooktime = 14,
|
||||||
|
recipe = "3d_armor:boots_"..k
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
After Width: | Height: | Size: 291 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 321 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 287 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 316 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 274 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 782 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 556 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 430 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 537 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 453 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 725 B |
After Width: | Height: | Size: 883 B |
After Width: | Height: | Size: 602 B |
After Width: | Height: | Size: 891 B |
After Width: | Height: | Size: 489 B |
After Width: | Height: | Size: 893 B |
After Width: | Height: | Size: 556 B |
After Width: | Height: | Size: 887 B |
After Width: | Height: | Size: 485 B |
After Width: | Height: | Size: 878 B |
After Width: | Height: | Size: 129 B |
After Width: | Height: | Size: 129 B |
After Width: | Height: | Size: 129 B |
After Width: | Height: | Size: 129 B |
After Width: | Height: | Size: 129 B |
After Width: | Height: | Size: 142 B |
After Width: | Height: | Size: 142 B |
After Width: | Height: | Size: 142 B |
After Width: | Height: | Size: 142 B |
After Width: | Height: | Size: 142 B |
After Width: | Height: | Size: 140 B |
After Width: | Height: | Size: 140 B |
After Width: | Height: | Size: 140 B |
After Width: | Height: | Size: 140 B |
After Width: | Height: | Size: 140 B |
After Width: | Height: | Size: 140 B |
After Width: | Height: | Size: 155 B |
After Width: | Height: | Size: 155 B |
After Width: | Height: | Size: 155 B |
After Width: | Height: | Size: 155 B |
After Width: | Height: | Size: 351 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 335 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 298 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 331 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 285 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 75 B |
After Width: | Height: | Size: 8.1 KiB |
BIN
kingdoms_game/mods/3d_armor-master/3d_armor/textures/blood_0.png
Normal file
After Width: | Height: | Size: 269 B |
BIN
kingdoms_game/mods/3d_armor-master/3d_armor/textures/blood_1.png
Normal file
After Width: | Height: | Size: 271 B |
BIN
kingdoms_game/mods/3d_armor-master/3d_armor/textures/blood_2.png
Normal file
After Width: | Height: | Size: 360 B |
BIN
kingdoms_game/mods/3d_armor-master/3d_armor/textures/blood_3.png
Normal file
After Width: | Height: | Size: 392 B |
After Width: | Height: | Size: 907 B |
After Width: | Height: | Size: 544 B |
@ -0,0 +1,22 @@
|
|||||||
|
[mod] 3d Armor Stand [3d_armor_stand]
|
||||||
|
=====================================
|
||||||
|
|
||||||
|
License Source Code: (C) 2016-2017 Stuart Jones - LGPL v2.1
|
||||||
|
|
||||||
|
Lecense Models: (C) 2016-2017 Stuart Jones - CC BY-SA 3.0
|
||||||
|
|
||||||
|
UV model mapping by tobyplowy(aka toby109tt)
|
||||||
|
|
||||||
|
License Textures:
|
||||||
|
|
||||||
|
3d_armor_stand.png
|
||||||
|
3d_armor_stand_locked.png
|
||||||
|
|
||||||
|
(C) 2017 tobyplowy - CC BY-SA 3.0
|
||||||
|
|
||||||
|
3d_armor_stand_feet.png
|
||||||
|
3d_armor_stand_head.png
|
||||||
|
3d_armor_stand_legs.png
|
||||||
|
3d_armor_stand_torso.png
|
||||||
|
|
||||||
|
(C) 2016-2017 Stuart Jones - CC BY-SA 3.0
|
21
kingdoms_game/mods/3d_armor-master/3d_armor_stand/README.txt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
[mod] 3d Armor Stand [3d_armor_stand]
|
||||||
|
=====================================
|
||||||
|
|
||||||
|
Depends: 3d_armor
|
||||||
|
|
||||||
|
Adds a chest-like armor stand for armor storage and display.
|
||||||
|
|
||||||
|
Crafting
|
||||||
|
--------
|
||||||
|
|
||||||
|
F = Wooden Fence [default:fence_wood]
|
||||||
|
S = Steel Ingot [default:steel_ingot]
|
||||||
|
|
||||||
|
+---+---+---+
|
||||||
|
| | F | |
|
||||||
|
+---+---+---+
|
||||||
|
| | F | |
|
||||||
|
+---+---+---+
|
||||||
|
| S | S | S |
|
||||||
|
+---+---+---+
|
||||||
|
|
@ -0,0 +1,2 @@
|
|||||||
|
3d_armor
|
||||||
|
|
301
kingdoms_game/mods/3d_armor-master/3d_armor_stand/init.lua
Normal file
@ -0,0 +1,301 @@
|
|||||||
|
local armor_stand_formspec = "size[8,7]" ..
|
||||||
|
default.gui_bg ..
|
||||||
|
default.gui_bg_img ..
|
||||||
|
default.gui_slots ..
|
||||||
|
default.get_hotbar_bg(0,3) ..
|
||||||
|
"list[current_name;armor_head;3,0.5;1,1;]" ..
|
||||||
|
"list[current_name;armor_torso;4,0.5;1,1;]" ..
|
||||||
|
"list[current_name;armor_legs;3,1.5;1,1;]" ..
|
||||||
|
"list[current_name;armor_feet;4,1.5;1,1;]" ..
|
||||||
|
"image[3,0.5;1,1;3d_armor_stand_head.png]" ..
|
||||||
|
"image[4,0.5;1,1;3d_armor_stand_torso.png]" ..
|
||||||
|
"image[3,1.5;1,1;3d_armor_stand_legs.png]" ..
|
||||||
|
"image[4,1.5;1,1;3d_armor_stand_feet.png]" ..
|
||||||
|
"list[current_player;main;0,3;8,1;]" ..
|
||||||
|
"list[current_player;main;0,4.25;8,3;8]"
|
||||||
|
|
||||||
|
local elements = {"head", "torso", "legs", "feet"}
|
||||||
|
|
||||||
|
local function get_stand_object(pos)
|
||||||
|
local object = nil
|
||||||
|
local objects = minetest.get_objects_inside_radius(pos, 0.5) or {}
|
||||||
|
for _, obj in pairs(objects) do
|
||||||
|
local ent = obj:get_luaentity()
|
||||||
|
if ent then
|
||||||
|
if ent.name == "3d_armor_stand:armor_entity" then
|
||||||
|
-- Remove duplicates
|
||||||
|
if object then
|
||||||
|
obj:remove()
|
||||||
|
else
|
||||||
|
object = obj
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return object
|
||||||
|
end
|
||||||
|
|
||||||
|
local function update_entity(pos)
|
||||||
|
local node = minetest.get_node(pos)
|
||||||
|
local object = get_stand_object(pos)
|
||||||
|
if object then
|
||||||
|
if not string.find(node.name, "3d_armor_stand:") then
|
||||||
|
object:remove()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
else
|
||||||
|
object = minetest.add_entity(pos, "3d_armor_stand:armor_entity")
|
||||||
|
end
|
||||||
|
if object then
|
||||||
|
local texture = "3d_armor_trans.png"
|
||||||
|
local textures = {}
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
local yaw = 0
|
||||||
|
if inv then
|
||||||
|
for _, element in pairs(elements) do
|
||||||
|
local stack = inv:get_stack("armor_"..element, 1)
|
||||||
|
if stack:get_count() == 1 then
|
||||||
|
local item = stack:get_name() or ""
|
||||||
|
local def = stack:get_definition() or {}
|
||||||
|
local groups = def.groups or {}
|
||||||
|
if groups["armor_"..element] then
|
||||||
|
local texture = def.texture or item:gsub("%:", "_")
|
||||||
|
table.insert(textures, texture..".png")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if #textures > 0 then
|
||||||
|
texture = table.concat(textures, "^")
|
||||||
|
end
|
||||||
|
if node.param2 then
|
||||||
|
local rot = node.param2 % 4
|
||||||
|
if rot == 1 then
|
||||||
|
yaw = 3 * math.pi / 2
|
||||||
|
elseif rot == 2 then
|
||||||
|
yaw = math.pi
|
||||||
|
elseif rot == 3 then
|
||||||
|
yaw = math.pi / 2
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object:setyaw(yaw)
|
||||||
|
object:set_properties({textures={texture}})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function has_locked_armor_stand_privilege(meta, player)
|
||||||
|
local name = ""
|
||||||
|
if player then
|
||||||
|
if minetest.check_player_privs(player, "protection_bypass") then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
name = player:get_player_name()
|
||||||
|
end
|
||||||
|
if name ~= meta:get_string("owner") then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_node("3d_armor_stand:armor_stand", {
|
||||||
|
description = "Armor stand",
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "3d_armor_stand.obj",
|
||||||
|
tiles = {"3d_armor_stand.png"},
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
walkable = false,
|
||||||
|
selection_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {-0.5,-0.5,-0.5, 0.5,1.4,0.5}
|
||||||
|
},
|
||||||
|
groups = {choppy=2, oddly_breakable_by_hand=2},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
on_construct = function(pos)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
meta:set_string("formspec", armor_stand_formspec)
|
||||||
|
meta:set_string("infotext", "Armor Stand")
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
for _, element in pairs(elements) do
|
||||||
|
inv:set_size("armor_"..element, 1)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
can_dig = function(pos, player)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
for _, element in pairs(elements) do
|
||||||
|
if not inv:is_empty("armor_"..element) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end,
|
||||||
|
after_place_node = function(pos)
|
||||||
|
minetest.add_entity(pos, "3d_armor_stand:armor_entity")
|
||||||
|
end,
|
||||||
|
allow_metadata_inventory_put = function(pos, listname, index, stack)
|
||||||
|
local def = stack:get_definition() or {}
|
||||||
|
local groups = def.groups or {}
|
||||||
|
if groups[listname] then
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
return 0
|
||||||
|
end,
|
||||||
|
allow_metadata_inventory_move = function(pos)
|
||||||
|
return 0
|
||||||
|
end,
|
||||||
|
on_metadata_inventory_put = function(pos)
|
||||||
|
update_entity(pos)
|
||||||
|
end,
|
||||||
|
on_metadata_inventory_take = function(pos)
|
||||||
|
update_entity(pos)
|
||||||
|
end,
|
||||||
|
after_destruct = function(pos)
|
||||||
|
update_entity(pos)
|
||||||
|
end,
|
||||||
|
on_blast = function(pos)
|
||||||
|
local object = get_stand_object(pos)
|
||||||
|
if object then
|
||||||
|
object:remove()
|
||||||
|
end
|
||||||
|
minetest.after(1, function(pos)
|
||||||
|
update_entity(pos)
|
||||||
|
end, pos)
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node("3d_armor_stand:locked_armor_stand", {
|
||||||
|
description = "Protected Armor stand",
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "3d_armor_stand.obj",
|
||||||
|
tiles = {"3d_armor_stand_locked.png"},
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
walkable = false,
|
||||||
|
selection_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {-0.5,-0.5,-0.5, 0.5,1.4,0.5}
|
||||||
|
},
|
||||||
|
groups = {choppy=2, oddly_breakable_by_hand=2},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
on_construct = function(pos)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
meta:set_string("formspec", armor_stand_formspec)
|
||||||
|
meta:set_string("infotext", "Armor Stand")
|
||||||
|
meta:set_string("owner", "")
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
for _, element in pairs(elements) do
|
||||||
|
inv:set_size("armor_"..element, 1)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
can_dig = function(pos, player)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
for _, element in pairs(elements) do
|
||||||
|
if not inv:is_empty("armor_"..element) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end,
|
||||||
|
after_place_node = function(pos, placer)
|
||||||
|
minetest.add_entity(pos, "3d_armor_stand:armor_entity")
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
meta:set_string("infotext", "Protected Armor Stand")
|
||||||
|
--meta:set_string("owner", placer:get_player_name() or "")
|
||||||
|
--meta:set_string("infotext", "Armor Stand (owned by " ..
|
||||||
|
--meta:get_string("owner") .. ")")
|
||||||
|
end,
|
||||||
|
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local def = stack:get_definition() or {}
|
||||||
|
local groups = def.groups or {}
|
||||||
|
if groups[listname] then
|
||||||
|
if not minetest.is_protected(pos, player:get_player_name()) then
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return 0
|
||||||
|
end,
|
||||||
|
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
if minetest.is_protected(pos, player:get_player_name()) then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
return stack:get_count()
|
||||||
|
end,
|
||||||
|
allow_metadata_inventory_move = function(pos)
|
||||||
|
return 0
|
||||||
|
end,
|
||||||
|
on_metadata_inventory_put = function(pos)
|
||||||
|
update_entity(pos)
|
||||||
|
end,
|
||||||
|
on_metadata_inventory_take = function(pos)
|
||||||
|
update_entity(pos)
|
||||||
|
end,
|
||||||
|
after_destruct = function(pos)
|
||||||
|
update_entity(pos)
|
||||||
|
end,
|
||||||
|
on_blast = function(pos)
|
||||||
|
local object = get_stand_object(pos)
|
||||||
|
if object then
|
||||||
|
object:remove()
|
||||||
|
end
|
||||||
|
minetest.after(1, function(pos)
|
||||||
|
update_entity(pos)
|
||||||
|
end, pos)
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_entity("3d_armor_stand:armor_entity", {
|
||||||
|
physical = true,
|
||||||
|
visual = "mesh",
|
||||||
|
mesh = "3d_armor_entity.obj",
|
||||||
|
visual_size = {x=1, y=1},
|
||||||
|
collisionbox = {-0.1,-0.4,-0.1, 0.1,1.3,0.1},
|
||||||
|
textures = {"3d_armor_trans.png"},
|
||||||
|
pos = nil,
|
||||||
|
timer = 0,
|
||||||
|
on_activate = function(self)
|
||||||
|
local pos = self.object:getpos()
|
||||||
|
if pos then
|
||||||
|
self.pos = vector.round(pos)
|
||||||
|
update_entity(pos)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
on_step = function(self, dtime)
|
||||||
|
if not self.pos then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
self.timer = self.timer + dtime
|
||||||
|
if self.timer > 1 then
|
||||||
|
self.timer = 0
|
||||||
|
local pos = self.object:getpos()
|
||||||
|
if pos then
|
||||||
|
if vector.equals(vector.round(pos), self.pos) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
update_entity(self.pos)
|
||||||
|
self.object:remove()
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "3d_armor_stand:armor_stand",
|
||||||
|
recipe = {
|
||||||
|
{"default:fence_wood"},
|
||||||
|
{"default:fence_wood"},
|
||||||
|
{"default:cobble"},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "3d_armor_stand:locked_armor_stand",
|
||||||
|
recipe = {
|
||||||
|
{"3d_armor_stand:armor_stand", "default:steel_ingot"},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
@ -0,0 +1,193 @@
|
|||||||
|
# Blender v2.73 (sub 0) OBJ File: '3d_armor_entity_3.blend'
|
||||||
|
# www.blender.org
|
||||||
|
mtllib 3d_armor_entity.mtl
|
||||||
|
o Player_Cube
|
||||||
|
v 2.200000 9.763893 1.200000
|
||||||
|
v 2.200000 9.763893 -1.200000
|
||||||
|
v 2.200000 2.663871 1.200000
|
||||||
|
v 2.200000 2.663871 -1.200000
|
||||||
|
v -2.200000 9.763893 -1.200000
|
||||||
|
v -2.200000 9.763893 1.200000
|
||||||
|
v -2.200000 2.663871 -1.200000
|
||||||
|
v -2.200000 2.663871 1.200000
|
||||||
|
v 2.300000 13.863962 2.300000
|
||||||
|
v 2.300000 13.863962 -2.300000
|
||||||
|
v 2.300000 9.263885 2.300000
|
||||||
|
v 2.300000 9.263885 -2.300000
|
||||||
|
v -2.300000 13.863962 -2.300000
|
||||||
|
v -2.300000 13.863962 2.300000
|
||||||
|
v -2.300000 9.263885 -2.300000
|
||||||
|
v -2.300000 9.263885 2.300000
|
||||||
|
v -2.322686 2.473175 -1.300000
|
||||||
|
v -2.322686 2.473175 1.300000
|
||||||
|
v -4.713554 2.682348 1.300000
|
||||||
|
v -4.713554 2.682348 -1.300000
|
||||||
|
v -1.686446 9.745432 -1.300000
|
||||||
|
v -1.686446 9.745432 1.300000
|
||||||
|
v -4.077313 9.954605 1.300000
|
||||||
|
v -4.077313 9.954605 -1.300000
|
||||||
|
v 4.077313 9.954605 -1.300000
|
||||||
|
v 4.077313 9.954605 1.300000
|
||||||
|
v 1.686446 9.745432 1.300000
|
||||||
|
v 1.686446 9.745432 -1.300000
|
||||||
|
v 4.713554 2.682348 -1.300000
|
||||||
|
v 4.713554 2.682348 1.300000
|
||||||
|
v 2.322686 2.473175 1.300000
|
||||||
|
v 2.322686 2.473175 -1.300000
|
||||||
|
v 0.139099 2.938947 -1.200000
|
||||||
|
v 0.139099 2.938947 1.200000
|
||||||
|
v 0.261266 -4.059988 1.200000
|
||||||
|
v 0.261266 -4.059988 -1.200000
|
||||||
|
v 2.660901 -4.018101 1.190000
|
||||||
|
v 2.660901 -4.018101 -1.210000
|
||||||
|
v 2.538733 2.980834 1.190000
|
||||||
|
v 2.538733 2.980834 -1.210000
|
||||||
|
v -0.139099 2.938947 -1.200000
|
||||||
|
v -0.139099 2.938947 1.200000
|
||||||
|
v -0.261266 -4.059988 1.200000
|
||||||
|
v -0.261266 -4.059988 -1.200000
|
||||||
|
v -2.538734 2.980834 -1.210000
|
||||||
|
v -2.538734 2.980834 1.190000
|
||||||
|
v -2.660901 -4.018101 -1.210000
|
||||||
|
v -2.660901 -4.018101 1.190000
|
||||||
|
v -2.799999 -4.387500 1.390000
|
||||||
|
v -2.799999 -4.387500 -1.410000
|
||||||
|
v -2.800000 -0.812499 1.390000
|
||||||
|
v -2.800000 -0.812499 -1.410000
|
||||||
|
v -0.000000 -4.387500 -1.400000
|
||||||
|
v -0.000000 -4.387500 1.400000
|
||||||
|
v -0.000000 -0.812499 1.400000
|
||||||
|
v -0.000000 -0.812499 -1.400000
|
||||||
|
v 2.800000 -0.812499 -1.410000
|
||||||
|
v 2.800000 -0.812499 1.390000
|
||||||
|
v 2.799999 -4.387500 -1.410000
|
||||||
|
v 2.799999 -4.387500 1.390000
|
||||||
|
v 0.000000 -4.387500 -1.400000
|
||||||
|
v 0.000000 -4.387500 1.400000
|
||||||
|
v 0.000000 -0.812499 1.400000
|
||||||
|
v 0.000000 -0.812499 -1.400000
|
||||||
|
v 2.267006 13.830965 2.267006
|
||||||
|
v 2.267006 13.830965 -2.267006
|
||||||
|
v 2.267006 9.296881 2.267006
|
||||||
|
v 2.267006 9.296881 -2.267006
|
||||||
|
v -2.267006 13.830965 -2.267006
|
||||||
|
v -2.267006 13.830965 2.267006
|
||||||
|
v -2.267006 9.296881 -2.267006
|
||||||
|
v -2.267006 9.296881 2.267006
|
||||||
|
vt 0.250000 0.375000
|
||||||
|
vt 0.250000 0.000000
|
||||||
|
vt 0.312500 0.000000
|
||||||
|
vt 0.312500 0.375000
|
||||||
|
vt 0.437500 0.375000
|
||||||
|
vt 0.437500 0.500000
|
||||||
|
vt 0.312500 0.500000
|
||||||
|
vt 0.562500 0.375000
|
||||||
|
vt 0.562500 0.500000
|
||||||
|
vt 0.437500 0.000000
|
||||||
|
vt 0.500000 0.000000
|
||||||
|
vt 0.500000 0.375000
|
||||||
|
vt 0.625000 0.000000
|
||||||
|
vt 0.625000 0.375000
|
||||||
|
vt 0.500000 0.750000
|
||||||
|
vt 0.500000 0.500000
|
||||||
|
vt 0.625000 0.500000
|
||||||
|
vt 0.625000 0.750000
|
||||||
|
vt 0.750000 0.750000
|
||||||
|
vt 0.750000 1.000000
|
||||||
|
vt 0.625000 1.000000
|
||||||
|
vt 0.875000 0.750000
|
||||||
|
vt 0.875000 1.000000
|
||||||
|
vt 0.750000 0.500000
|
||||||
|
vt 0.875000 0.500000
|
||||||
|
vt 1.000000 0.750000
|
||||||
|
vt 1.000000 0.500000
|
||||||
|
vt 0.750000 0.375000
|
||||||
|
vt 0.812500 0.500000
|
||||||
|
vt 0.812500 0.375000
|
||||||
|
vt 0.687500 0.375000
|
||||||
|
vt 0.687500 0.500000
|
||||||
|
vt 0.687500 0.000000
|
||||||
|
vt 0.750000 0.000000
|
||||||
|
vt 0.812500 0.000000
|
||||||
|
vt 0.875000 0.375000
|
||||||
|
vt 0.875000 0.000000
|
||||||
|
vt 0.125000 0.375000
|
||||||
|
vt 0.062500 0.375000
|
||||||
|
vt 0.062500 0.500000
|
||||||
|
vt 0.125000 0.500000
|
||||||
|
vt 0.187500 0.375000
|
||||||
|
vt 0.187500 0.500000
|
||||||
|
vt 0.000000 0.375000
|
||||||
|
vt 0.000000 0.000000
|
||||||
|
vt 0.062500 0.000000
|
||||||
|
vt 0.187500 0.000000
|
||||||
|
vt 0.125000 0.000000
|
||||||
|
vt 0.437500 0.875000
|
||||||
|
vt 0.437500 1.000000
|
||||||
|
vt 0.375000 1.000000
|
||||||
|
vt 0.375000 0.875000
|
||||||
|
vt 0.250000 0.875000
|
||||||
|
vt 0.312500 0.875000
|
||||||
|
vt 0.312500 0.656250
|
||||||
|
vt 0.250000 0.656250
|
||||||
|
vt 0.500000 0.875000
|
||||||
|
vt 0.437500 0.656250
|
||||||
|
vt 0.500000 0.656250
|
||||||
|
vt 0.375000 0.656250
|
||||||
|
vt 0.312500 1.000000
|
||||||
|
usemtl Armor
|
||||||
|
s off
|
||||||
|
f 1/1 3/2 4/3 2/4
|
||||||
|
f 5/5 6/6 1/7 2/4
|
||||||
|
f 8/6 7/5 4/8 3/9
|
||||||
|
f 5/5 2/4 4/3 7/10
|
||||||
|
f 7/10 8/11 6/12 5/5
|
||||||
|
f 8/11 3/13 1/14 6/12
|
||||||
|
f 9/15 11/16 12/17 10/18
|
||||||
|
f 13/19 14/20 9/21 10/18
|
||||||
|
f 12/22 11/23 16/20 15/19
|
||||||
|
f 13/19 10/18 12/17 15/24
|
||||||
|
f 14/22 13/19 15/24 16/25
|
||||||
|
f 9/26 14/22 16/25 11/27
|
||||||
|
f 17/28 18/24 19/29 20/30
|
||||||
|
f 24/31 23/32 22/24 21/28
|
||||||
|
f 23/31 24/14 20/13 19/33
|
||||||
|
f 24/31 21/28 17/34 20/33
|
||||||
|
f 21/28 22/30 18/35 17/34
|
||||||
|
f 22/30 23/36 19/37 18/35
|
||||||
|
f 27/30 31/35 30/37 26/36
|
||||||
|
f 28/28 32/34 31/35 27/30
|
||||||
|
f 25/31 29/33 32/34 28/28
|
||||||
|
f 26/31 30/33 29/13 25/14
|
||||||
|
f 25/31 28/28 27/24 26/32
|
||||||
|
f 32/28 29/30 30/29 31/24
|
||||||
|
f 40/38 33/39 34/40 39/41
|
||||||
|
f 36/42 38/38 37/41 35/43
|
||||||
|
f 39/44 37/45 38/46 40/39
|
||||||
|
f 34/1 35/2 37/47 39/42
|
||||||
|
f 40/38 38/48 36/46 33/39
|
||||||
|
f 33/42 36/47 35/48 34/38
|
||||||
|
f 45/38 46/41 42/40 41/39
|
||||||
|
f 41/42 42/38 43/48 44/47
|
||||||
|
f 45/38 41/39 44/46 47/48
|
||||||
|
f 42/1 46/42 48/47 43/2
|
||||||
|
f 46/44 45/39 47/46 48/45
|
||||||
|
f 44/42 43/43 48/41 47/38
|
||||||
|
f 53/49 54/50 49/51 50/52
|
||||||
|
f 51/53 52/54 50/55 49/56
|
||||||
|
f 55/57 51/49 49/58 54/59
|
||||||
|
f 52/52 56/54 53/55 50/60
|
||||||
|
f 56/49 55/52 54/60 53/58
|
||||||
|
f 52/52 51/51 55/61 56/54
|
||||||
|
f 64/49 61/58 62/60 63/52
|
||||||
|
f 57/52 59/60 61/55 64/54
|
||||||
|
f 63/57 62/59 60/58 58/49
|
||||||
|
f 58/53 60/56 59/55 57/54
|
||||||
|
f 61/49 59/52 60/51 62/50
|
||||||
|
f 57/52 64/54 63/61 58/51
|
||||||
|
f 65/15 66/18 68/17 67/16
|
||||||
|
f 69/19 66/18 65/21 70/20
|
||||||
|
f 68/22 71/19 72/20 67/23
|
||||||
|
f 69/19 71/24 68/17 66/18
|
||||||
|
f 70/22 72/25 71/24 69/19
|
||||||
|
f 65/26 67/27 72/25 70/22
|
@ -0,0 +1,280 @@
|
|||||||
|
# Blender v2.72 (sub 0) OBJ File: ''
|
||||||
|
# www.blender.org
|
||||||
|
mtllib 3d_armor_stand.mtl
|
||||||
|
o Armor_Stand_Player_Cube_Stand
|
||||||
|
v 0.062500 0.125002 -0.062500
|
||||||
|
v 0.062500 -0.437500 -0.062500
|
||||||
|
v 0.062500 -0.437500 0.062500
|
||||||
|
v 0.062500 0.125002 0.062500
|
||||||
|
v -0.187500 0.250004 0.062500
|
||||||
|
v -0.187500 0.250004 -0.062500
|
||||||
|
v -0.250000 0.250004 -0.062500
|
||||||
|
v -0.250000 0.250004 0.062500
|
||||||
|
v -0.062500 -0.437500 -0.062500
|
||||||
|
v -0.062500 -0.437500 0.062500
|
||||||
|
v -0.187500 -0.437500 0.062500
|
||||||
|
v -0.187500 -0.437500 -0.062500
|
||||||
|
v -0.187500 0.125002 0.062500
|
||||||
|
v -0.187500 0.125002 -0.062500
|
||||||
|
v -0.187500 0.937504 0.062500
|
||||||
|
v -0.187500 0.937504 -0.062500
|
||||||
|
v -0.375000 0.937504 -0.062500
|
||||||
|
v -0.375000 0.937504 0.062500
|
||||||
|
v -0.062500 0.125002 0.062500
|
||||||
|
v 0.187500 0.125002 -0.062500
|
||||||
|
v 0.187500 -0.437500 -0.062500
|
||||||
|
v -0.062500 0.125002 -0.062500
|
||||||
|
v -0.250000 0.125007 -0.062500
|
||||||
|
v -0.250000 0.125007 0.062500
|
||||||
|
v 0.187500 -0.437500 0.062500
|
||||||
|
v 0.187500 0.125002 0.062500
|
||||||
|
v -0.062500 0.937504 0.062500
|
||||||
|
v -0.187500 0.812504 0.062500
|
||||||
|
v -0.062500 0.812504 0.062500
|
||||||
|
v -0.062500 0.937504 -0.062500
|
||||||
|
v 0.187500 0.250004 -0.062500
|
||||||
|
v 0.187500 0.250004 0.062500
|
||||||
|
v 0.250000 0.250004 0.062500
|
||||||
|
v 0.250000 0.250004 -0.062500
|
||||||
|
v 0.250000 0.125007 0.062500
|
||||||
|
v 0.250000 0.125007 -0.062500
|
||||||
|
v 0.187500 0.812504 0.062500
|
||||||
|
v 0.187500 0.812504 -0.062500
|
||||||
|
v 0.375000 0.812504 -0.062500
|
||||||
|
v 0.375000 0.812504 0.062500
|
||||||
|
v 0.187500 0.937504 -0.062500
|
||||||
|
v 0.187500 0.937504 0.062500
|
||||||
|
v 0.375000 0.937504 0.062500
|
||||||
|
v 0.375000 0.937504 -0.062500
|
||||||
|
v 0.062500 0.937504 -0.062500
|
||||||
|
v 0.062500 0.937504 0.062500
|
||||||
|
v -0.062500 0.812504 -0.062500
|
||||||
|
v -0.187500 0.812504 -0.062500
|
||||||
|
v 0.062500 0.812504 -0.062500
|
||||||
|
v 0.062500 0.812504 0.062500
|
||||||
|
v -0.375000 0.812504 -0.062500
|
||||||
|
v -0.375000 0.812504 0.062500
|
||||||
|
v -0.062500 0.250004 0.062500
|
||||||
|
v 0.062500 0.250004 0.062500
|
||||||
|
v 0.062500 0.250004 -0.062500
|
||||||
|
v -0.062500 0.250004 -0.062500
|
||||||
|
v -0.062500 1.312504 -0.062500
|
||||||
|
v 0.062500 1.312504 -0.062500
|
||||||
|
v -0.062500 1.312504 0.062500
|
||||||
|
v 0.062500 1.312504 0.062500
|
||||||
|
v -0.500000 -0.437500 -0.500000
|
||||||
|
v -0.500000 -0.437500 0.500000
|
||||||
|
v 0.500000 -0.437500 0.500000
|
||||||
|
v 0.500000 -0.437500 -0.500000
|
||||||
|
v -0.500000 -0.500000 -0.500000
|
||||||
|
v 0.500000 -0.500000 -0.500000
|
||||||
|
v 0.500000 -0.500000 0.500000
|
||||||
|
v -0.500000 -0.500000 0.500000
|
||||||
|
vt 0.062500 0.140625
|
||||||
|
vt 0.062500 0.000000
|
||||||
|
vt 0.093750 0.000000
|
||||||
|
vt 0.093750 0.140625
|
||||||
|
vt 0.140625 0.234375
|
||||||
|
vt 0.140625 0.203125
|
||||||
|
vt 0.156250 0.203125
|
||||||
|
vt 0.156250 0.234375
|
||||||
|
vt 0.093750 0.171875
|
||||||
|
vt 0.062500 0.171875
|
||||||
|
vt 0.218750 0.140625
|
||||||
|
vt 0.187500 0.140625
|
||||||
|
vt 0.187500 0.000000
|
||||||
|
vt 0.218750 0.000000
|
||||||
|
vt 0.078125 0.437500
|
||||||
|
vt 0.078125 0.468750
|
||||||
|
vt 0.031250 0.468750
|
||||||
|
vt 0.031250 0.437500
|
||||||
|
vt 0.250000 0.140625
|
||||||
|
vt 0.250000 0.000000
|
||||||
|
vt 0.031250 0.140625
|
||||||
|
vt 0.031250 0.000000
|
||||||
|
vt 0.156250 0.140625
|
||||||
|
vt 0.156250 0.000000
|
||||||
|
vt 0.187500 0.203125
|
||||||
|
vt 0.156250 0.171875
|
||||||
|
vt 0.187500 0.171875
|
||||||
|
vt 0.125000 0.000000
|
||||||
|
vt 0.125000 0.140625
|
||||||
|
vt 0.000000 0.140625
|
||||||
|
vt 0.000000 0.000000
|
||||||
|
vt 0.328125 0.437500
|
||||||
|
vt 0.296875 0.437500
|
||||||
|
vt 0.296875 0.406250
|
||||||
|
vt 0.328125 0.406250
|
||||||
|
vt 0.109375 0.437500
|
||||||
|
vt 0.109375 0.468750
|
||||||
|
vt 0.046875 0.203125
|
||||||
|
vt 0.046875 0.234375
|
||||||
|
vt 0.031250 0.234375
|
||||||
|
vt 0.031250 0.203125
|
||||||
|
vt 0.000000 0.203125
|
||||||
|
vt 0.000000 0.171875
|
||||||
|
vt 0.031250 0.171875
|
||||||
|
vt 0.265625 0.468750
|
||||||
|
vt 0.265625 0.437500
|
||||||
|
vt 0.218750 0.437500
|
||||||
|
vt 0.218750 0.468750
|
||||||
|
vt 0.218750 0.171875
|
||||||
|
vt 0.171875 0.468750
|
||||||
|
vt 0.171875 0.437500
|
||||||
|
vt 0.078125 0.406250
|
||||||
|
vt 0.031250 0.406250
|
||||||
|
vt 0.140625 0.468750
|
||||||
|
vt 0.140625 0.437500
|
||||||
|
vt 0.140625 0.406250
|
||||||
|
vt 0.171875 0.406250
|
||||||
|
vt 0.109375 0.406250
|
||||||
|
vt 0.359375 0.437500
|
||||||
|
vt 0.359375 0.406250
|
||||||
|
vt 0.390625 0.406250
|
||||||
|
vt 0.390625 0.437500
|
||||||
|
vt 0.437500 0.406250
|
||||||
|
vt 0.437500 0.437500
|
||||||
|
vt 0.000000 0.437500
|
||||||
|
vt 0.000000 0.406250
|
||||||
|
vt 0.250000 0.437500
|
||||||
|
vt 0.218750 0.406250
|
||||||
|
vt 0.250000 0.406250
|
||||||
|
vt 0.359375 0.468750
|
||||||
|
vt 0.406250 0.468750
|
||||||
|
vt 0.406250 0.437500
|
||||||
|
vt 0.109375 0.234375
|
||||||
|
vt 0.078125 0.234375
|
||||||
|
vt 0.078125 0.203125
|
||||||
|
vt 0.109375 0.203125
|
||||||
|
vt 0.062500 0.468750
|
||||||
|
vt 0.062500 0.562500
|
||||||
|
vt 0.031250 0.562500
|
||||||
|
vt 0.328125 0.468750
|
||||||
|
vt 0.296875 0.468750
|
||||||
|
vt 0.062500 0.593750
|
||||||
|
vt 0.031250 0.593750
|
||||||
|
vt 0.093750 0.468750
|
||||||
|
vt 0.093750 0.562500
|
||||||
|
vt 0.125000 0.468750
|
||||||
|
vt 0.125000 0.562500
|
||||||
|
vt 0.000000 0.562500
|
||||||
|
vt 0.000000 0.468750
|
||||||
|
vt 0.078125 0.171875
|
||||||
|
vt 0.046875 0.171875
|
||||||
|
vt 0.265625 0.203125
|
||||||
|
vt 0.265625 0.171875
|
||||||
|
vt 0.296875 0.171875
|
||||||
|
vt 0.296875 0.203125
|
||||||
|
vt 0.265625 0.234375
|
||||||
|
vt 0.281250 0.234375
|
||||||
|
vt 0.281250 0.203125
|
||||||
|
vt 0.312500 0.171875
|
||||||
|
vt 0.312500 0.203125
|
||||||
|
vt 0.140625 0.171875
|
||||||
|
vt 0.171875 0.234375
|
||||||
|
vt 0.171875 0.203125
|
||||||
|
vt 0.109375 0.171875
|
||||||
|
vt 0.234375 0.203125
|
||||||
|
vt 0.203125 0.203125
|
||||||
|
vt 0.203125 0.171875
|
||||||
|
vt 0.234375 0.171875
|
||||||
|
vt 0.234375 0.234375
|
||||||
|
vt 0.203125 0.234375
|
||||||
|
vt 0.062500 0.375000
|
||||||
|
vt 0.062500 0.234375
|
||||||
|
vt 0.093750 0.234375
|
||||||
|
vt 0.093750 0.375000
|
||||||
|
vt 0.031250 0.375000
|
||||||
|
vt 0.125000 0.234375
|
||||||
|
vt 0.125000 0.375000
|
||||||
|
vt 0.000000 0.375000
|
||||||
|
vt 0.000000 0.234375
|
||||||
|
vt 0.218750 0.375000
|
||||||
|
vt 0.187500 0.375000
|
||||||
|
vt 0.187500 0.234375
|
||||||
|
vt 0.218750 0.234375
|
||||||
|
vt 0.250000 0.375000
|
||||||
|
vt 0.250000 0.234375
|
||||||
|
vt 0.156250 0.375000
|
||||||
|
vt 0.250000 1.000000
|
||||||
|
vt 0.250000 0.750000
|
||||||
|
vt 0.500000 0.750000
|
||||||
|
vt 0.500000 1.000000
|
||||||
|
vt 0.750000 0.750000
|
||||||
|
vt 0.750000 1.000000
|
||||||
|
vt 0.750000 0.734375
|
||||||
|
vt 1.000000 0.734375
|
||||||
|
vt 1.000000 0.750000
|
||||||
|
vt 0.000000 0.750000
|
||||||
|
vt 0.000000 0.734375
|
||||||
|
vt 0.250000 0.734375
|
||||||
|
vt 0.500000 0.734375
|
||||||
|
usemtl Stand
|
||||||
|
s off
|
||||||
|
f 1/1 2/2 3/3 4/4
|
||||||
|
f 5/5 6/6 7/7 8/8
|
||||||
|
f 9/1 10/4 11/9 12/10
|
||||||
|
f 13/11 14/12 12/13 11/14
|
||||||
|
f 15/15 16/16 17/17 18/18
|
||||||
|
f 19/19 13/11 11/14 10/20
|
||||||
|
f 2/2 1/1 20/21 21/22
|
||||||
|
f 14/12 22/23 9/24 12/13
|
||||||
|
f 8/25 7/7 23/26 24/27
|
||||||
|
f 4/4 3/3 25/28 26/29
|
||||||
|
f 22/23 19/29 10/28 9/24
|
||||||
|
f 26/30 25/31 21/22 20/21
|
||||||
|
f 27/32 15/33 28/34 29/35
|
||||||
|
f 16/16 15/15 27/36 30/37
|
||||||
|
f 31/38 32/39 33/40 34/41
|
||||||
|
f 33/42 35/43 36/44 34/41
|
||||||
|
f 37/45 38/46 39/47 40/48
|
||||||
|
f 2/49 21/27 25/12 3/11
|
||||||
|
f 41/50 42/51 43/47 44/48
|
||||||
|
f 38/52 41/15 44/18 39/53
|
||||||
|
f 41/50 45/54 46/55 42/51
|
||||||
|
f 16/51 30/55 47/56 48/57
|
||||||
|
f 41/15 38/52 49/58 45/36
|
||||||
|
f 46/59 50/60 37/61 42/62
|
||||||
|
f 42/62 37/61 40/63 43/64
|
||||||
|
f 43/65 40/66 39/53 44/18
|
||||||
|
f 18/67 17/47 51/68 52/69
|
||||||
|
f 28/34 15/33 18/67 52/69
|
||||||
|
f 16/51 48/57 51/68 17/47
|
||||||
|
f 48/59 28/70 52/71 51/72
|
||||||
|
f 53/73 54/74 55/75 56/76
|
||||||
|
f 30/77 57/78 58/79 45/17
|
||||||
|
f 50/60 46/59 27/32 29/35
|
||||||
|
f 29/80 47/32 49/33 50/81
|
||||||
|
f 47/56 30/55 45/36 49/58
|
||||||
|
f 57/78 59/82 60/83 58/79
|
||||||
|
f 27/84 59/85 57/78 30/77
|
||||||
|
f 46/86 60/87 59/85 27/84
|
||||||
|
f 45/17 58/79 60/88 46/89
|
||||||
|
f 1/90 55/75 31/38 20/91
|
||||||
|
f 54/92 4/93 26/94 32/95
|
||||||
|
f 26/92 20/96 36/97 35/98
|
||||||
|
f 20/91 31/38 34/41 36/44
|
||||||
|
f 32/95 26/94 35/99 33/100
|
||||||
|
f 6/6 14/101 23/26 7/7
|
||||||
|
f 14/102 13/103 24/7 23/8
|
||||||
|
f 6/6 56/76 22/104 14/101
|
||||||
|
f 53/105 5/106 13/107 19/108
|
||||||
|
f 13/107 5/106 8/25 24/27
|
||||||
|
f 1/90 22/104 56/76 55/75
|
||||||
|
f 53/105 19/108 4/93 54/92
|
||||||
|
f 1/109 4/105 19/106 22/110
|
||||||
|
f 49/111 55/112 54/113 50/114
|
||||||
|
f 38/115 31/40 55/112 49/111
|
||||||
|
f 50/114 54/113 32/116 37/117
|
||||||
|
f 37/118 32/119 31/40 38/115
|
||||||
|
f 28/120 48/121 6/122 5/123
|
||||||
|
f 29/124 28/120 5/123 53/125
|
||||||
|
f 48/121 47/126 56/8 6/122
|
||||||
|
f 47/126 29/117 53/116 56/8
|
||||||
|
usemtl Base
|
||||||
|
f 61/127 62/128 63/129 64/130
|
||||||
|
f 65/129 66/131 67/132 68/130
|
||||||
|
f 62/131 68/133 67/134 63/135
|
||||||
|
f 63/136 67/137 66/138 64/128
|
||||||
|
f 61/129 64/128 66/138 65/139
|
||||||
|
f 62/131 61/129 65/139 68/133
|
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 243 B |
After Width: | Height: | Size: 262 B |
After Width: | Height: | Size: 249 B |
After Width: | Height: | Size: 274 B |
11
kingdoms_game/mods/3d_armor-master/LICENSE.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
3D Armor - Visible Player Armor
|
||||||
|
===============================
|
||||||
|
|
||||||
|
Default Item Textures (C) Cisoun - WTFPL
|
||||||
|
|
||||||
|
Armor Textures: Copyright (C) 2013 Ryan Jones - CC-BY-SA
|
||||||
|
|
||||||
|
Source Code: Copyright (C) 2013 Stuart Jones - LGPL
|
||||||
|
|
||||||
|
Special credit to Jordach and MirceaKitsune for providing the default 3d character model.
|
||||||
|
|
54
kingdoms_game/mods/3d_armor-master/README.md
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
Modpack - 3d Armor [0.4.5]
|
||||||
|
==========================
|
||||||
|
|
||||||
|
[mod] Visible Player Armor [3d_armor]
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
Minetest Version: 0.4.13
|
||||||
|
|
||||||
|
Game: minetest_game and many derivatives
|
||||||
|
|
||||||
|
Depends: default
|
||||||
|
|
||||||
|
Recommends: inventory_plus or unified_inventory (use only one)
|
||||||
|
|
||||||
|
Adds craftable armor that is visible to other players. Each armor item worn contributes to
|
||||||
|
a player's armor group level making them less vulnerable to attack.
|
||||||
|
|
||||||
|
Armor takes damage when a player is hurt, however, many armor items offer a 'stackable'
|
||||||
|
percentage chance of restoring the lost health points. Overall armor level is boosted by 10%
|
||||||
|
when wearing a full matching set (helmet, chestplate, leggings and boots of the same material)
|
||||||
|
|
||||||
|
Fire protection has been added by TenPlus1 and in use when ethereal mod is found and crystal
|
||||||
|
armor has been enabled. each piece of armor offers 1 fire protection, level 1 protects
|
||||||
|
against torches, level 2 against crystal spikes, 3 for fire and 5 protects when in lava.
|
||||||
|
|
||||||
|
Compatible with player skins [skins] by Zeg9 and Player Textures [player_textures] by PilzAdam
|
||||||
|
and [simple_skins] by TenPlus1.
|
||||||
|
|
||||||
|
Armor can be configured by adding a file called armor.conf in 3d_armor mod or world directory.
|
||||||
|
see armor.conf.example for all available options.
|
||||||
|
|
||||||
|
[mod] Visible Wielded Items [wieldview]
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
Depends: 3d_armor
|
||||||
|
|
||||||
|
Makes hand wielded items visible to other players.
|
||||||
|
|
||||||
|
[mod] Shields [shields]
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Depends: 3d_armor
|
||||||
|
|
||||||
|
Originally a part of 3d_armor, shields have been re-included as an optional extra.
|
||||||
|
If you do not want shields then simply remove the shields folder from the modpack.
|
||||||
|
|
||||||
|
[mod] Technic Armor [technic_armor]
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
Depends: 3d_armor
|
||||||
|
|
||||||
|
Adds tin, silver and technic materials to 3d_armor.
|
||||||
|
Requires technic mod to be installed for craft registration.
|
||||||
|
|