mirror of
https://github.com/SmallJoker/minetest-u_skinsdb.git
synced 2025-07-10 03:50:32 +02:00
Compare commits
17 Commits
opt_skin_s
...
master
Author | SHA1 | Date | |
---|---|---|---|
da0c782e93 | |||
0f7d405720 | |||
0d96c0b30d | |||
dd396bfad2 | |||
f389e6bd13 | |||
e762283dec | |||
5cb484e251 | |||
71bebbeb09 | |||
503b9a0125 | |||
a4921558f3 | |||
8d5709661f | |||
7c25df22dc | |||
29332b7cf3 | |||
343a08e44a | |||
4b4aa7fd4c | |||
88b801b2c0 | |||
dc44a8805f |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
|
200
MT_skins_updater.cs
Normal file
200
MT_skins_updater.cs
Normal file
@ -0,0 +1,200 @@
|
||||
using System;
|
||||
//Json.NET library (http://json.codeplex.com/)
|
||||
using Newtonsoft.Json;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System.IO;
|
||||
|
||||
// MT skins updater for the u_skins mod
|
||||
// Creator: Krock
|
||||
// License: zlib (http://www.zlib.net/zlib_license.html)
|
||||
namespace MT_skins_updater {
|
||||
class Program {
|
||||
static void Main(string[] args) {
|
||||
Console.WriteLine("Welcome to the MT skins updater!");
|
||||
Console.WriteLine("# Created by: Krock (2014-07-10)");
|
||||
Engine e = new Engine();
|
||||
Console.WriteLine(@"Path to the u_skins mod: (ex. 'E:\Minetest\mods\u_skinsdb\u_skins\')");
|
||||
string path = Console.ReadLine();
|
||||
Console.WriteLine("Start updating at page: ('0' to update everything)");
|
||||
int page = getInt(Console.ReadLine());
|
||||
e.Start(path, page);
|
||||
Console.WriteLine("Press any key to exit.");
|
||||
Console.ReadKey(false);
|
||||
}
|
||||
public static int getInt(string i) {
|
||||
int ret = 0;
|
||||
int.TryParse(i, out ret);
|
||||
return (ret > 0)? ret : 0;
|
||||
}
|
||||
}
|
||||
class Engine {
|
||||
string root = "http://minetest.fensta.bplaced.net";
|
||||
bool alternate = true; //should it use the special version of medadata saving?
|
||||
|
||||
public void Start(string path, int page) {
|
||||
if (path.Length < 5) {
|
||||
Console.WriteLine("Too short path. STOP.");
|
||||
return;
|
||||
}
|
||||
if (path[path.Length - 1] != '\\') {
|
||||
path += '\\';
|
||||
}
|
||||
if(!Directory.Exists(path + "meta")){
|
||||
Console.WriteLine("Folder 'meta' not found. STOP.");
|
||||
return;
|
||||
}
|
||||
if(!Directory.Exists(path + "textures")){
|
||||
Console.WriteLine("Folder 'textures' not found. STOP.");
|
||||
return;
|
||||
}
|
||||
WebClient cli = new WebClient();
|
||||
//add useragent to identify
|
||||
cli.Headers.Add("User-Agent", "MT_skin_grabber 1.1");
|
||||
|
||||
bool firstSkin = true;
|
||||
List<string> skin_local = new List<string>();
|
||||
int pages = page,
|
||||
updated = 0;
|
||||
|
||||
for (; page <= pages; page++) {
|
||||
string contents = "";
|
||||
try {
|
||||
contents = cli.DownloadString(root + "/api/get.json.php?getlist&page=" + page);
|
||||
} catch(WebException e) {
|
||||
Console.WriteLine("Whoops! Error at page ID: " + page + ". WebClient sais: " + e.Message);
|
||||
Console.WriteLine("Press any key to skip this page.");
|
||||
Console.ReadKey(false);
|
||||
continue;
|
||||
}
|
||||
Data o = JsonConvert.DeserializeObject<Data>(contents);
|
||||
if (o.pages != pages) {
|
||||
pages = o.pages;
|
||||
}
|
||||
|
||||
Console.WriteLine("# Page " + page + " (" + o.per_page + " skins)");
|
||||
for (int i = 0; i < o.skins.Length; i++) {
|
||||
int id = o.skins[i].id;
|
||||
if(o.skins[i].type != "image/png"){
|
||||
Console.WriteLine("Image type '" + o.skins[i].type + "' not supported at skin ID: " + id);
|
||||
Console.WriteLine("Press any key to continue.");
|
||||
Console.ReadKey(false);
|
||||
continue;
|
||||
}
|
||||
//eliminate special chars!
|
||||
o.skins[i].name = WebUtility.HtmlDecode(o.skins[i].name);
|
||||
o.skins[i].author = WebUtility.HtmlDecode(o.skins[i].author);
|
||||
|
||||
//to delete old, removed skins
|
||||
if (firstSkin) {
|
||||
firstSkin = false;
|
||||
|
||||
string[] files = Directory.GetFiles(path + "textures\\");
|
||||
for (int f = 0; f < files.Length; f++) {
|
||||
string[] filePath = stringSplitLast(files[f], '\\'),
|
||||
fileName = stringSplitLast(filePath[1], '.'),
|
||||
fileVer = stringSplitLast(fileName[0], '_');
|
||||
if (fileVer[1] == "" || fileVer[0] != "character") continue;
|
||||
|
||||
int skinNr = Program.getInt(fileVer[1]);
|
||||
if (skinNr <= id) continue;
|
||||
skin_local.Add(fileName[0]);
|
||||
}
|
||||
} else skin_local.Remove("character_" + id);
|
||||
|
||||
//get file size, only override changed
|
||||
FileInfo localImg = new FileInfo(path + "textures\\character_" + id + ".png");
|
||||
byte[] imageData = Convert.FromBase64String(o.skins[i].img);
|
||||
bool isDif = true;
|
||||
if (localImg.Exists) isDif = (Math.Abs(imageData.Length - localImg.Length) >= 3);
|
||||
|
||||
if (isDif) {
|
||||
File.WriteAllBytes(localImg.FullName, imageData);
|
||||
imageData = null;
|
||||
//previews
|
||||
try {
|
||||
cli.DownloadFile(root + "/skins/1/" + id + ".png", path + "textures\\character_" + id + "_preview.png");
|
||||
} catch (WebException e) {
|
||||
Console.WriteLine("Whoops! Error at skin ID: " + id + ". WebClient sais: " + e.Message);
|
||||
Console.WriteLine("Press any key to continue.");
|
||||
Console.ReadKey(false);
|
||||
}
|
||||
} else {
|
||||
Console.WriteLine("[SKIP] character_" + id);
|
||||
continue;
|
||||
}
|
||||
|
||||
string meta = "";
|
||||
if (!alternate) {
|
||||
meta = "name = \"" + o.skins[i].name + "\",\n";
|
||||
meta += "author = \"" + o.skins[i].author + "\",\n";
|
||||
meta += "comment = \"" + o.skins[i].license + '"';
|
||||
} else {
|
||||
meta = o.skins[i].name + '\n' + o.skins[i].author + '\n' + o.skins[i].license;
|
||||
}
|
||||
File.WriteAllText(path + "meta\\character_" + id + ".txt", meta);
|
||||
updated++;
|
||||
Console.WriteLine("[" + id + "] " + shorten(o.skins[i].name, 20) + "\t by: " + o.skins[i].author + "\t (" + o.skins[i].license + ")");
|
||||
}
|
||||
}
|
||||
foreach (string fileName in skin_local) {
|
||||
if(File.Exists(path + "textures\\" + fileName + ".png")) {
|
||||
File.Delete(path + "textures\\" + fileName + ".png");
|
||||
}
|
||||
if(File.Exists(path + "textures\\" + fileName + "_preview.png")) {
|
||||
File.Delete(path + "textures\\" + fileName + "_preview.png");
|
||||
}
|
||||
if(File.Exists(path + "meta\\" + fileName + ".txt")) {
|
||||
File.Delete(path + "meta\\" + fileName + ".txt");
|
||||
}
|
||||
Console.WriteLine("[DEL] " + fileName + " (deleted skin)");
|
||||
}
|
||||
Console.WriteLine("Done. Updated " + updated + " skins!");
|
||||
}
|
||||
string shorten(string inp, int len) {
|
||||
char[] shr = new char[len];
|
||||
for (int i = 0; i < len; i++) {
|
||||
if (i < inp.Length) {
|
||||
shr[i] = inp[i];
|
||||
} else shr[i] = ' ';
|
||||
}
|
||||
return new string(shr);
|
||||
}
|
||||
|
||||
string[] stringSplitLast(string path, char limiter) {
|
||||
int found = 0;
|
||||
int totalLen = path.Length - 1;
|
||||
for (int i = totalLen; i >= 0; i--) {
|
||||
if (path[i] == limiter) {
|
||||
found = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (found == 0) {
|
||||
return new string[] { "", "" };
|
||||
}
|
||||
|
||||
int len = totalLen - found;
|
||||
char[] str_1 = new char[found],
|
||||
str_2 = new char[len];
|
||||
|
||||
for (int i = 0; i < path.Length; i++) {
|
||||
if (i == found) continue;
|
||||
if (i < found) {
|
||||
str_1[i] = path[i];
|
||||
} else {
|
||||
str_2[i - found - 1] = path[i];
|
||||
}
|
||||
}
|
||||
return new string[] { new string(str_1), new string(str_2) };
|
||||
}
|
||||
}
|
||||
class Data {
|
||||
public Skins_data[] skins;
|
||||
public int page, pages, per_page;
|
||||
}
|
||||
class Skins_data {
|
||||
public string name, author, uploaded, type, license, img;
|
||||
public int id, license_id;
|
||||
}
|
||||
}
|
BIN
MT_skins_updater.exe
Normal file
BIN
MT_skins_updater.exe
Normal file
Binary file not shown.
BIN
Newtonsoft.Json.dll
Normal file
BIN
Newtonsoft.Json.dll
Normal file
Binary file not shown.
29
README
29
README
@ -1,21 +1,28 @@
|
||||
minetest-u_skins
|
||||
================
|
||||
|
||||
Skins mod for minetest unified_inventory by Dean Montgomery - feel free to merge it into skinsdb or unified_inventory git.
|
||||
An skin extention for the Minetest mod unified_inventory by Dean Montgomery
|
||||
It downloads the skins from the Minetest skin database. (http://minetest.fensta.bplaced.net)
|
||||
|
||||
Requires latest unified_inventory from:
|
||||
https://github.com/minetest-technic/unified_inventory
|
||||
|
||||
This is the "u_skindb" branch, it is ment to download the skins from addi's skin database (http://minetest.fensta.bplaced.net).
|
||||
To download the latest skins you need to run:
|
||||
"./update_from_db.py" OR
|
||||
the win32.NET client
|
||||
|
||||
To re-download the latest skins you have 2 ways:
|
||||
1, if you have blender) Run the script "update_from_db.py" OR "update_from_db2.py"
|
||||
and then "./generate_previews.sh"
|
||||
|
||||
2, if you are lazy) Run the script "update_from_db_hacky.py"
|
||||
and then make sure, you have set "u_skins.used_hacky" to "true" in "./u_skins/init.lua"
|
||||
Licenses:
|
||||
--------
|
||||
|
||||
cornernote:
|
||||
Lua source code (GPLv3)
|
||||
|
||||
Fritigern:
|
||||
update_skins_db.sh (CC-BY-NC-SA 4.0)
|
||||
|
||||
Krock:
|
||||
Lua source code (GPLv3)
|
||||
MT_skins_updater.exe (WTFPL)
|
||||
|
||||
Credits:
|
||||
MirceaKitsune (WTFPL) + bundled script by Zeg9 (WTFPL too):
|
||||
skin_previews.blend
|
||||
--------
|
||||
RealyBadAngel unified_inventory and Zeg9 skinsdb
|
||||
|
@ -1,48 +0,0 @@
|
||||
#!/bin/sh
|
||||
# This script is used to generate the previews needed by the mod
|
||||
# It requires blender with the latest python API (2.6x is tested)
|
||||
# A script that works with older blenders and, maybe, without python, is available in older commits.
|
||||
# This script can also use pngcrush and imagemagick to reduce output size,
|
||||
# please enable them if you want to push to the git repository of the mod.
|
||||
# Pngcrush output will be written to .previews/pngcrush_output
|
||||
# Warning: any file in .previews/ and u_skins/textures might be deleted without asking.
|
||||
PNGCRUSH=true
|
||||
IMAGEMAGICK=true
|
||||
cd .previews
|
||||
rm ../u_skins/textures/*_preview*.png # Remove all previous previews
|
||||
blender -b skin_previews.blend --python-text "Generate previews" > /dev/null
|
||||
if $IMAGEMAGICK
|
||||
then echo "Stripping metadata from generated files..."
|
||||
else echo "Moving files..."
|
||||
fi
|
||||
rm -rf output # remove my output
|
||||
mkdir -p output
|
||||
for i in blender_out/character_*_00.png;
|
||||
do
|
||||
out_name=$(basename $i | sed -e 's/_00.png//g')
|
||||
out_file=output/"$out_name"_preview.png
|
||||
if $IMAGEMAGICK
|
||||
then
|
||||
convert -strip $i $out_file
|
||||
else
|
||||
mv $i $out_file
|
||||
fi
|
||||
done
|
||||
for i in blender_out/character_*_01.png;
|
||||
do
|
||||
out_name=$(basename $i | sed -e 's/_01.png//g')
|
||||
out_file=output/"$out_name"_preview_back.png
|
||||
if $IMAGEMAGICK
|
||||
then
|
||||
convert -strip $i $out_file
|
||||
else
|
||||
mv $i $out_file
|
||||
fi
|
||||
done
|
||||
if $PNGCRUSH
|
||||
then
|
||||
echo "Running pngcrush..."
|
||||
pngcrush -d ../u_skins/textures/ output/*_preview*.png 2> pngcrush_output
|
||||
else mv output/*_preview*.png ../u_skins/textures/
|
||||
fi
|
||||
echo "Done !"
|
59
set_meta.sh
59
set_meta.sh
@ -1,59 +0,0 @@
|
||||
#!/bin/bash
|
||||
SPRITES=$(find -regextype sed -regex '.*/player_[0-9]\{1,\}.png' | sort -V)
|
||||
MODELS=$(find -regextype sed -regex '.*/character_[0-9]\{1,\}.png' | sort -V)
|
||||
function ask_for_meta {
|
||||
convert $2 -scale 100x200 /tmp/skins_set_meta
|
||||
SNAME=$(basename $1)
|
||||
SNAME=${SNAME%.*}
|
||||
METAFILE=u_skins/meta/$SNAME.txt
|
||||
FORCE=$3
|
||||
if $FORCE || ! [ -f $METAFILE ]
|
||||
then
|
||||
echo $METAFILE
|
||||
YADOUT=$(yad --form --image=/tmp/skins_set_meta --field $SNAME:LBL --field=Name --field=Author --field=Description --field=Comment)
|
||||
if [ -z "$YADOUT" ]; then exit; fi # canceled
|
||||
OIFS="$IFS"
|
||||
IFS='|'
|
||||
read -a VALUES <<< "$YADOUT"
|
||||
IFS="$OIFS"
|
||||
NAME=${VALUES[1]}
|
||||
AUTHOR=${VALUES[2]}
|
||||
DESCRIPTION=${VALUES[3]}
|
||||
COMMENT=${VALUES[4]}
|
||||
if [ -n "$NAME" ] && [ -n "$AUTHOR" ]
|
||||
then
|
||||
echo -n > $METAFILE # clear it
|
||||
echo 'name = "'$NAME'",' >> $METAFILE
|
||||
echo 'author = "'$AUTHOR'",' >> $METAFILE
|
||||
# only write description and comment if they are specified
|
||||
if [ -n "$DESCRIPTION" ]
|
||||
then
|
||||
echo 'description = "'$DESCRIPTION'",' >> $METAFILE
|
||||
fi
|
||||
if [ -n "$COMMENT" ]
|
||||
then
|
||||
echo 'comment = "'$COMMENT'",' >> $METAFILE
|
||||
fi
|
||||
echo "Saved !"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
if [ -z $1 ]
|
||||
then
|
||||
for i in $SPRITES
|
||||
do
|
||||
ask_for_meta $i $i false
|
||||
done
|
||||
for i in $MODELS
|
||||
do
|
||||
ask_for_meta $i ${i%.*}_preview.png false
|
||||
done
|
||||
else
|
||||
if [ -f ${1%.*}_preview.png ]
|
||||
then
|
||||
ask_for_meta $1 ${1%.*}_preview.png true
|
||||
else
|
||||
ask_for_meta $1 $1 true
|
||||
fi
|
||||
fi
|
||||
rm /tmp/skins_set_meta
|
@ -1,2 +1,3 @@
|
||||
unified_inventory?
|
||||
unified_inventory
|
||||
default
|
||||
simple_skins?
|
212
u_skins/init.lua
212
u_skins/init.lua
@ -3,82 +3,88 @@
|
||||
-- Copyright (c) 2012 cornernote, Dean Montgomery
|
||||
-- License: GPLv3
|
||||
u_skins = {}
|
||||
u_skins.type = { SPRITE=0, MODEL=1 }
|
||||
u_skins.modpath = minetest.get_modpath("u_skins")
|
||||
u_skins.file = minetest.get_worldpath().."/u_skins.mt"
|
||||
u_skins.default = "character_1"
|
||||
u_skins.pages = {}
|
||||
u_skins.u_skins = {}
|
||||
u_skins.used_hacky = false -- set to true if used hacky way to update skins
|
||||
u_skins.file_save = false
|
||||
u_skins.simple_skins = false
|
||||
|
||||
-- ( Deprecated
|
||||
u_skins.type = { SPRITE=0, MODEL=1, ERROR=99 }
|
||||
u_skins.get_type = function(texture)
|
||||
if not texture then return end
|
||||
if string.sub(texture,0,string.len("character")) == "character" then
|
||||
return u_skins.type.MODEL
|
||||
if not u_skins.is_skin(texture) then
|
||||
return u_skins.type.ERROR
|
||||
end
|
||||
if string.sub(texture,0,string.len("player")) == "player" then
|
||||
return u_skins.type.SPRITE
|
||||
return u_skins.type.MODEL
|
||||
end
|
||||
-- )
|
||||
|
||||
u_skins.is_skin = function(texture)
|
||||
if not texture then
|
||||
return false
|
||||
end
|
||||
if not u_skins.meta[texture] then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
u_skins.modpath = minetest.get_modpath("u_skins")
|
||||
dofile(u_skins.modpath.."/skinlist.lua")
|
||||
dofile(u_skins.modpath.."/meta.lua")
|
||||
dofile(u_skins.modpath.."/players.lua")
|
||||
|
||||
if rawget(_G, "skins") then
|
||||
u_skins.simple_skins = true
|
||||
end
|
||||
|
||||
u_skins.update_player_skin = function(player)
|
||||
name = player:get_player_name()
|
||||
if u_skins.get_type(u_skins.u_skins[name]) == u_skins.type.SPRITE then
|
||||
player:set_properties({
|
||||
visual = "upright_sprite",
|
||||
textures = {u_skins.u_skins[name]..".png",u_skins.u_skins[name].."_back.png"},
|
||||
visual_size = {x=1, y=2},
|
||||
})
|
||||
elseif u_skins.get_type(u_skins.u_skins[name]) == u_skins.type.MODEL then
|
||||
player:set_properties({
|
||||
visual = "mesh",
|
||||
mesh = "character.x",
|
||||
textures = {u_skins.u_skins[name]..".png"},
|
||||
visual_size = {x=1, y=1},
|
||||
})
|
||||
local name = player:get_player_name()
|
||||
if u_skins.simple_skins and u_skins.u_skins[name] == u_skins.default then
|
||||
return
|
||||
end
|
||||
u_skins.save()
|
||||
|
||||
if not u_skins.is_skin(u_skins.u_skins[name]) then
|
||||
u_skins.u_skins[name] = u_skins.default
|
||||
end
|
||||
player:set_properties({
|
||||
textures = {u_skins.u_skins[name]..".png"},
|
||||
})
|
||||
end
|
||||
|
||||
-- Display Current Skin
|
||||
unified_inventory.register_page("u_skins", {
|
||||
get_formspec = function(player)
|
||||
name = player:get_player_name()
|
||||
local formspec = "background[0.06,0.99;7.92,7.52;ui_misc_form.png]"
|
||||
if u_skins.get_type(u_skins.u_skins[name]) == u_skins.type.MODEL then
|
||||
formspec = formspec.."image[0,.75;1,2;"..u_skins.u_skins[name].."_preview.png]"
|
||||
if not u_skins.used_hacky then
|
||||
-- player back view
|
||||
formspec = formspec.."image[1,.75;1,2;"..u_skins.u_skins[name].."_preview_back.png]"
|
||||
end
|
||||
formspec = formspec.."label[6,.5;Raw texture:]"
|
||||
.."image[6,1;2,1;"..u_skins.u_skins[name]..".png]"
|
||||
|
||||
else
|
||||
formspec = formspec
|
||||
.. "image[0,.75;1,2;"..u_skins.u_skins[name]..".png]"
|
||||
.. "image[1,.75;1,2;"..u_skins.u_skins[name].."_back.png]"
|
||||
local name = player:get_player_name()
|
||||
if not u_skins.is_skin(u_skins.u_skins[name]) then
|
||||
u_skins.u_skins[name] = u_skins.default
|
||||
end
|
||||
|
||||
local formspec = ("background[0.06,0.99;7.92,7.52;ui_misc_form.png]"
|
||||
.."image[0,.75;1,2;"..u_skins.u_skins[name].."_preview.png]"
|
||||
.."label[6,.5;Raw texture:]"
|
||||
.."image[6,1;2,1;"..u_skins.u_skins[name]..".png]")
|
||||
|
||||
local meta = u_skins.meta[u_skins.u_skins[name]]
|
||||
if meta then
|
||||
if meta.name then
|
||||
formspec = formspec .. "label[2,.5;Name: "..meta.name.."]"
|
||||
if meta.name ~= "" then
|
||||
formspec = formspec.."label[2,.5;Name: "..minetest.formspec_escape(meta.name).."]"
|
||||
end
|
||||
if meta.author then
|
||||
formspec = formspec .. "label[2,1;Author: "..meta.author.."]"
|
||||
if meta.author ~= "" then
|
||||
formspec = formspec.."label[2,1;Author: "..minetest.formspec_escape(meta.author).."]"
|
||||
end
|
||||
if meta.description then
|
||||
formspec = formspec .. "label[2,1.5;"..meta.description.."]"
|
||||
if meta.license ~= "" then
|
||||
formspec = formspec.."label[2,1.5;License: "..minetest.formspec_escape(meta.license).."]"
|
||||
end
|
||||
if meta.comment then
|
||||
formspec = formspec .. 'label[2,2;"'..meta.comment..'"]'
|
||||
if meta.description ~= "" then --what's that??
|
||||
formspec = formspec.."label[2,2;Description: "..minetest.formspec_escape(meta.description).."]"
|
||||
end
|
||||
end
|
||||
|
||||
formspec = formspec .. "button[.75,3;6.5,.5;u_skins_page_0;Change]"
|
||||
local page = 0
|
||||
if u_skins.pages[name] then
|
||||
page = u_skins.pages[name]
|
||||
end
|
||||
formspec = formspec .. "button[.75,3;6.5,.5;u_skins_page$"..page..";Change]"
|
||||
return {formspec=formspec}
|
||||
end,
|
||||
})
|
||||
@ -89,67 +95,83 @@ unified_inventory.register_button("u_skins", {
|
||||
})
|
||||
|
||||
-- Create all of the skin-picker pages.
|
||||
for x = 0, math.floor(#u_skins.list/16+1) do
|
||||
unified_inventory.register_page("u_skins_page_"..x, {
|
||||
get_formspec = function(player)
|
||||
page = u_skins.pages[player:get_player_name()]
|
||||
if page == nil then page = 0 end
|
||||
local formspec = "background[0.06,0.99;7.92,7.52;ui_misc_form.png]"
|
||||
local index = 0
|
||||
local skip = 0 -- Skip u_skins, used for pages
|
||||
-- skin thumbnails
|
||||
for i, skin in ipairs(u_skins.list) do
|
||||
if skip < page*16 then skip = skip + 1 else
|
||||
if index < 16 then
|
||||
formspec = formspec .. "image_button["..(index%8)..","..((math.floor(index/8))*2)..";1,2;"..skin
|
||||
if u_skins.get_type(skin) == u_skins.type.MODEL then
|
||||
formspec = formspec .. "_preview"
|
||||
end
|
||||
formspec = formspec .. ".png;u_skins_set_"..i..";]"
|
||||
end
|
||||
index = index +1
|
||||
end
|
||||
|
||||
u_skins.generate_pages = function(texture)
|
||||
local page = 0
|
||||
local pages = {}
|
||||
for i, skin in ipairs(u_skins.list) do
|
||||
local p_index = (i - 1) % 16
|
||||
if p_index == 0 then
|
||||
page = page + 1
|
||||
pages[page] = {}
|
||||
end
|
||||
pages[page][p_index + 1] = {i, skin}
|
||||
end
|
||||
local total_pages = page
|
||||
page = 1
|
||||
for page, arr in ipairs(pages) do
|
||||
local formspec = "background[0.06,0.99;7.92,7.52;ui_misc_form.png]"
|
||||
local y = -0.1
|
||||
for i, skin in ipairs(arr) do
|
||||
local x = (i - 1) % 8
|
||||
if i > 1 and x == 0 then
|
||||
y = 1.8
|
||||
end
|
||||
-- prev next page buttons
|
||||
if page > 0 then
|
||||
formspec = formspec .. "button[0,4;1,.5;u_skins_page_"..(page-1)..";<<]"
|
||||
else
|
||||
formspec = formspec .. "button[0,4;1,.5;u_skins_page_"..page..";<<]"
|
||||
formspec = (formspec.."image_button["..x..","..y..";1,2;"..
|
||||
skin[2].."_preview.png;u_skins_set$"..skin[1]..";]"..
|
||||
"tooltip[u_skins_set$"..skin[1]..";"..u_skins.meta[skin[2]].name.."]")
|
||||
end
|
||||
local page_prev = page - 2
|
||||
local page_next = page
|
||||
if page_prev < 0 then
|
||||
page_prev = total_pages - 1
|
||||
end
|
||||
if page_next >= total_pages then
|
||||
page_next = 0
|
||||
end
|
||||
formspec = (formspec
|
||||
.."button[0,3.8;1,.5;u_skins_page$"..page_prev..";<<]"
|
||||
.."button[.75,3.8;6.5,.5;u_skins_null;Page "..page.."/"..total_pages.."]"
|
||||
.."button[7,3.8;1,.5;u_skins_page$"..page_next..";>>]")
|
||||
|
||||
unified_inventory.register_page("u_skins_page$"..(page - 1), {
|
||||
get_formspec = function(player)
|
||||
return {formspec=formspec}
|
||||
end
|
||||
formspec = formspec .. "button[.75,4;6.5,.5;u_skins_page_"..page..";Page "..(page+1).."/"..math.floor(#u_skins.list/16+1).."]" -- a button is used so text is centered
|
||||
if index > 16 then
|
||||
formspec = formspec .. "button[7,4;1,.5;u_skins_page_"..(page+1)..";>>]"
|
||||
else
|
||||
formspec = formspec .. "button[7,4;1,.5;u_skins_page_"..page..";>>]"
|
||||
end
|
||||
return {formspec=formspec}
|
||||
end,
|
||||
})
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
-- click button handlers
|
||||
minetest.register_on_player_receive_fields(function(player,formname,fields)
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if fields.u_skins then
|
||||
unified_inventory.set_inventory_formspec(player,"craft")
|
||||
unified_inventory.set_inventory_formspec(player, "craft")
|
||||
return
|
||||
end
|
||||
for field, _ in pairs(fields) do
|
||||
if string.sub(field,0,string.len("u_skins_set_")) == "u_skins_set_" then
|
||||
u_skins.u_skins[player:get_player_name()] = u_skins.list[tonumber(string.sub(field,string.len("u_skins_set_")+1))]
|
||||
local current = string.split(field, "$", 2)
|
||||
if current[1] == "u_skins_set" then
|
||||
u_skins.u_skins[player:get_player_name()] = u_skins.list[tonumber(current[2])]
|
||||
u_skins.update_player_skin(player)
|
||||
unified_inventory.set_inventory_formspec(player,"u_skins")
|
||||
end
|
||||
if string.sub(field,0,string.len("u_skins_page_")) == "u_skins_page_" then
|
||||
u_skins.pages[player:get_player_name()] = tonumber(string.sub(field,string.len("u_skins_page_")+1))
|
||||
unified_inventory.set_inventory_formspec(player,"u_skins_page_"..u_skins.pages[player:get_player_name()])
|
||||
u_skins.file_save = true
|
||||
unified_inventory.set_inventory_formspec(player, "u_skins")
|
||||
elseif current[1] == "u_skins_page" then
|
||||
u_skins.pages[player:get_player_name()] = current[2]
|
||||
unified_inventory.set_inventory_formspec(player, "u_skins_page$"..current[2])
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
-- set defaults
|
||||
-- Change skin on join - reset if invalid
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
if not u_skins.u_skins[player:get_player_name()] then
|
||||
u_skins.u_skins[player:get_player_name()] = "character_1"
|
||||
local player_name = player:get_player_name()
|
||||
if not u_skins.is_skin(u_skins.u_skins[player_name]) then
|
||||
u_skins.u_skins[player_name] = u_skins.default
|
||||
end
|
||||
u_skins.update_player_skin(player)
|
||||
end)
|
||||
|
||||
u_skins.generate_pages()
|
||||
u_skins.load_players()
|
||||
|
||||
minetest.log("action", "[u_skins] loaded.")
|
||||
|
@ -1,15 +0,0 @@
|
||||
u_skins.meta = {}
|
||||
for _, i in ipairs(u_skins.list) do
|
||||
u_skins.meta[i] = {}
|
||||
local f = io.open(u_skins.modpath.."/meta/"..i..".txt")
|
||||
local data = nil
|
||||
if f then
|
||||
data = minetest.deserialize("return {"..f:read('*all').."}")
|
||||
f:close()
|
||||
end
|
||||
data = data or {}
|
||||
u_skins.meta[i].name = data.name or ""
|
||||
u_skins.meta[i].author = data.author or ""
|
||||
u_skins.meta[i].description = data.description or nil
|
||||
u_skins.meta[i].comment = data.comment or nil
|
||||
end
|
@ -1,3 +1,3 @@
|
||||
name = "Sam 0",
|
||||
author = "Jordach",
|
||||
comment = "CC BY-SA 3.0",
|
||||
Sam 0
|
||||
Jordach
|
||||
CC BY-SA 3.0
|
||||
|
@ -1,3 +1,3 @@
|
||||
name = "Tuxedo Sam",
|
||||
author = "Jordach",
|
||||
comment = "CC BY-NC-SA 3.0",
|
||||
Tuxedo Sam
|
||||
Jordach
|
||||
CC BY-NC-SA 3.0
|
||||
|
@ -1,3 +1,3 @@
|
||||
name = "Ladyvioletkitty",
|
||||
author = "lordphoenixmh",
|
||||
comment = "CC BY 4.0",
|
||||
Franklin
|
||||
Ferdi Napoli
|
||||
CC BY-NC-SA 3.0
|
3
u_skins/meta/character_1000.txt
Normal file
3
u_skins/meta/character_1000.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Obito
|
||||
TheGamer
|
||||
CC BY-NC-SA 4.0
|
3
u_skins/meta/character_1001.txt
Normal file
3
u_skins/meta/character_1001.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Shadow
|
||||
TheGamer
|
||||
CC BY-NC-SA 3.0
|
3
u_skins/meta/character_1002.txt
Normal file
3
u_skins/meta/character_1002.txt
Normal file
@ -0,0 +1,3 @@
|
||||
fred-fnafhs
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1003.txt
Normal file
3
u_skins/meta/character_1003.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Springtrap-FNAFHS
|
||||
Michuu
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1004.txt
Normal file
3
u_skins/meta/character_1004.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Mai-FNAFHS
|
||||
Michuu
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1005.txt
Normal file
3
u_skins/meta/character_1005.txt
Normal file
@ -0,0 +1,3 @@
|
||||
REDboycool
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1006.txt
Normal file
3
u_skins/meta/character_1006.txt
Normal file
@ -0,0 +1,3 @@
|
||||
FoxyMinecraft
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1007.txt
Normal file
3
u_skins/meta/character_1007.txt
Normal file
@ -0,0 +1,3 @@
|
||||
MLP-Fluttershy
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1008.txt
Normal file
3
u_skins/meta/character_1008.txt
Normal file
@ -0,0 +1,3 @@
|
||||
MLP-Sonata
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1009.txt
Normal file
3
u_skins/meta/character_1009.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Sans-UNDERTALE
|
||||
julito
|
||||
CC BY-SA 3.0
|
@ -1,3 +1,3 @@
|
||||
name = "4°district",
|
||||
author = "Ferdi Napoli",
|
||||
comment = "CC BY-SA 3.0",
|
||||
Emma
|
||||
Cidney7760
|
||||
CC BY-SA 3.0
|
||||
|
3
u_skins/meta/character_1010.txt
Normal file
3
u_skins/meta/character_1010.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Flash
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1011.txt
Normal file
3
u_skins/meta/character_1011.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Chica-FNAFHS
|
||||
Michuu
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1012.txt
Normal file
3
u_skins/meta/character_1012.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Venom-Ultimate spiderman
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1013.txt
Normal file
3
u_skins/meta/character_1013.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Hatsune Miku-VOCALOID
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1014.txt
Normal file
3
u_skins/meta/character_1014.txt
Normal file
@ -0,0 +1,3 @@
|
||||
fin raro
|
||||
raroooooos
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1015.txt
Normal file
3
u_skins/meta/character_1015.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Baby-SisterLocation
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1016.txt
Normal file
3
u_skins/meta/character_1016.txt
Normal file
@ -0,0 +1,3 @@
|
||||
MiniReena-SisterLocation
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1017.txt
Normal file
3
u_skins/meta/character_1017.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Bonnie-FNAFHS
|
||||
Michuu
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1018.txt
Normal file
3
u_skins/meta/character_1018.txt
Normal file
@ -0,0 +1,3 @@
|
||||
BomBom-FNAFHS
|
||||
Michuu
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1019.txt
Normal file
3
u_skins/meta/character_1019.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Mario normal-Super mario
|
||||
julito
|
||||
CC BY-SA 3.0
|
@ -1,3 +1,3 @@
|
||||
name = "Chop",
|
||||
author = "Ferdi Napoli",
|
||||
comment = "CC BY-NC-SA 3.0",
|
||||
Bart Simpson
|
||||
Ferdi Napoli
|
||||
CC BY-NC-SA 3.0
|
3
u_skins/meta/character_1020.txt
Normal file
3
u_skins/meta/character_1020.txt
Normal file
@ -0,0 +1,3 @@
|
||||
iron man(skin iron man 1)
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1021.txt
Normal file
3
u_skins/meta/character_1021.txt
Normal file
@ -0,0 +1,3 @@
|
||||
iron man(skin iron man 2)
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1022.txt
Normal file
3
u_skins/meta/character_1022.txt
Normal file
@ -0,0 +1,3 @@
|
||||
iron man(skin iron man 3)
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1023.txt
Normal file
3
u_skins/meta/character_1023.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Chiantos
|
||||
Chiantos
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1024.txt
Normal file
3
u_skins/meta/character_1024.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Goku (normal)
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1025.txt
Normal file
3
u_skins/meta/character_1025.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Goku (super saiyan)
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1026.txt
Normal file
3
u_skins/meta/character_1026.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Venom (arreglado)
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1027.txt
Normal file
3
u_skins/meta/character_1027.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Minireena (arreglada)
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1028.txt
Normal file
3
u_skins/meta/character_1028.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Flower Girl
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1029.txt
Normal file
3
u_skins/meta/character_1029.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Super Nerd
|
||||
julito
|
||||
CC BY-SA 3.0
|
@ -1,3 +1,3 @@
|
||||
name = "Franklin",
|
||||
author = "Ferdi Napoli",
|
||||
comment = "CC BY-NC-SA 3.0",
|
||||
Creeper
|
||||
Ferdi Napoli
|
||||
CC BY-NC-SA 3.0
|
3
u_skins/meta/character_1030.txt
Normal file
3
u_skins/meta/character_1030.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Super Nerd (arreglado)
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1031.txt
Normal file
3
u_skins/meta/character_1031.txt
Normal file
@ -0,0 +1,3 @@
|
||||
julito (sin sombras)
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1032.txt
Normal file
3
u_skins/meta/character_1032.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Carolina
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1033.txt
Normal file
3
u_skins/meta/character_1033.txt
Normal file
@ -0,0 +1,3 @@
|
||||
carolina (con chaleco)
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1034.txt
Normal file
3
u_skins/meta/character_1034.txt
Normal file
@ -0,0 +1,3 @@
|
||||
ROBLOX Noob
|
||||
Fedora P
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1035.txt
Normal file
3
u_skins/meta/character_1035.txt
Normal file
@ -0,0 +1,3 @@
|
||||
ROBLOX Guest
|
||||
Fedora P
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1036.txt
Normal file
3
u_skins/meta/character_1036.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Mermaid 2
|
||||
loupicate
|
||||
CC BY-SA 4.0
|
3
u_skins/meta/character_1037.txt
Normal file
3
u_skins/meta/character_1037.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Space Noob
|
||||
Fedora P
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1038.txt
Normal file
3
u_skins/meta/character_1038.txt
Normal file
@ -0,0 +1,3 @@
|
||||
:O
|
||||
Fedora P
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1039.txt
Normal file
3
u_skins/meta/character_1039.txt
Normal file
@ -0,0 +1,3 @@
|
||||
:I
|
||||
Fedora P
|
||||
CC BY-SA 3.0
|
@ -1,3 +1,3 @@
|
||||
name = "Trevor",
|
||||
author = "Ferdi Napoli",
|
||||
comment = "CC BY-NC-SA 3.0",
|
||||
War Machine
|
||||
Ferdi Napoli
|
||||
CC BY-NC-SA 3.0
|
3
u_skins/meta/character_1040.txt
Normal file
3
u_skins/meta/character_1040.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Rainbow Cubey
|
||||
Fedora P
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1041.txt
Normal file
3
u_skins/meta/character_1041.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Shadow Shadow Shadow XD
|
||||
Fedora P
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1042.txt
Normal file
3
u_skins/meta/character_1042.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Wilber the Coyote
|
||||
Fedora P
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1043.txt
Normal file
3
u_skins/meta/character_1043.txt
Normal file
@ -0,0 +1,3 @@
|
||||
niño cool
|
||||
daniel pereira
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1044.txt
Normal file
3
u_skins/meta/character_1044.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Le_Thug
|
||||
Kris0
|
||||
CC BY-NC-SA 3.0
|
3
u_skins/meta/character_1045.txt
Normal file
3
u_skins/meta/character_1045.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Funtime foxy-Sister location
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1046.txt
Normal file
3
u_skins/meta/character_1046.txt
Normal file
@ -0,0 +1,3 @@
|
||||
TwilightWolf
|
||||
Rin
|
||||
CC BY-NC-SA 3.0
|
3
u_skins/meta/character_1047.txt
Normal file
3
u_skins/meta/character_1047.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Rin-chan 1
|
||||
Rin
|
||||
CC BY-NC-SA 3.0
|
3
u_skins/meta/character_1048.txt
Normal file
3
u_skins/meta/character_1048.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Rin-chan 2
|
||||
Rin
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1049.txt
Normal file
3
u_skins/meta/character_1049.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Ocd guy
|
||||
Oscar
|
||||
CC BY-SA 3.0
|
@ -1,3 +1,3 @@
|
||||
name = "Bart Simpson",
|
||||
author = "Ferdi Napoli",
|
||||
comment = "CC BY-NC-SA 3.0",
|
||||
Gangnam Style
|
||||
Ferdi Napoli
|
||||
CC BY-NC-SA 3.0
|
3
u_skins/meta/character_1050.txt
Normal file
3
u_skins/meta/character_1050.txt
Normal file
@ -0,0 +1,3 @@
|
||||
alien7u7
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1051.txt
Normal file
3
u_skins/meta/character_1051.txt
Normal file
@ -0,0 +1,3 @@
|
||||
destroyed bot
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1052.txt
Normal file
3
u_skins/meta/character_1052.txt
Normal file
@ -0,0 +1,3 @@
|
||||
claw alien
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1053.txt
Normal file
3
u_skins/meta/character_1053.txt
Normal file
@ -0,0 +1,3 @@
|
||||
bad bot
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1054.txt
Normal file
3
u_skins/meta/character_1054.txt
Normal file
@ -0,0 +1,3 @@
|
||||
good bot
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1055.txt
Normal file
3
u_skins/meta/character_1055.txt
Normal file
@ -0,0 +1,3 @@
|
||||
bad bot2
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1056.txt
Normal file
3
u_skins/meta/character_1056.txt
Normal file
@ -0,0 +1,3 @@
|
||||
good bot2
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1057.txt
Normal file
3
u_skins/meta/character_1057.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Hello Neighbor
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1058.txt
Normal file
3
u_skins/meta/character_1058.txt
Normal file
@ -0,0 +1,3 @@
|
||||
KOOPA
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1059.txt
Normal file
3
u_skins/meta/character_1059.txt
Normal file
@ -0,0 +1,3 @@
|
||||
police
|
||||
julito
|
||||
CC BY-SA 3.0
|
@ -1,3 +1,3 @@
|
||||
name = "Creeper",
|
||||
author = "Ferdi Napoli",
|
||||
comment = "CC BY-NC-SA 3.0",
|
||||
Sonic The Hedgehog
|
||||
Ferdi Napoli
|
||||
CC BY-NC-SA 3.0
|
3
u_skins/meta/character_1060.txt
Normal file
3
u_skins/meta/character_1060.txt
Normal file
@ -0,0 +1,3 @@
|
||||
miku en biquini (VOCALOID)
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1061.txt
Normal file
3
u_skins/meta/character_1061.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Steven Universe
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1062.txt
Normal file
3
u_skins/meta/character_1062.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Peridot-Steven Universe
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1063.txt
Normal file
3
u_skins/meta/character_1063.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Lapiz lazuli-Steven Universe
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1064.txt
Normal file
3
u_skins/meta/character_1064.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Rose-Steven Universe
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1065.txt
Normal file
3
u_skins/meta/character_1065.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Amatista-Stevev Universe
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1066.txt
Normal file
3
u_skins/meta/character_1066.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Amatista-Steven Universe
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1067.txt
Normal file
3
u_skins/meta/character_1067.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Perla-Steven Universe
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1068.txt
Normal file
3
u_skins/meta/character_1068.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Garnet-Steven Universe
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1069.txt
Normal file
3
u_skins/meta/character_1069.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Jasper-Steven Universe
|
||||
julito
|
||||
CC BY-SA 3.0
|
@ -1,3 +1,3 @@
|
||||
name = "War Machine",
|
||||
author = "Ferdi Napoli",
|
||||
comment = "CC BY-NC-SA 3.0",
|
||||
Charizard
|
||||
Ferdi Napoli
|
||||
CC BY-NC-SA 3.0
|
3
u_skins/meta/character_1070.txt
Normal file
3
u_skins/meta/character_1070.txt
Normal file
@ -0,0 +1,3 @@
|
||||
diamond armor
|
||||
oscar
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1071.txt
Normal file
3
u_skins/meta/character_1071.txt
Normal file
@ -0,0 +1,3 @@
|
||||
omgchad
|
||||
oscar
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1072.txt
Normal file
3
u_skins/meta/character_1072.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Purple Armor
|
||||
julito
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1073.txt
Normal file
3
u_skins/meta/character_1073.txt
Normal file
@ -0,0 +1,3 @@
|
||||
ScratchCat
|
||||
Fedora P
|
||||
CC BY-SA 3.0
|
3
u_skins/meta/character_1075.txt
Normal file
3
u_skins/meta/character_1075.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Zonard
|
||||
ektor
|
||||
CC 0 (1.0)
|
3
u_skins/meta/character_1076.txt
Normal file
3
u_skins/meta/character_1076.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Keupon
|
||||
ektor
|
||||
CC 0 (1.0)
|
3
u_skins/meta/character_1077.txt
Normal file
3
u_skins/meta/character_1077.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Minato namikazi
|
||||
TheGamer
|
||||
CC BY-NC-SA 4.0
|
3
u_skins/meta/character_1078.txt
Normal file
3
u_skins/meta/character_1078.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Killua
|
||||
TheGamer
|
||||
CC BY-NC-SA 3.0
|
3
u_skins/meta/character_1079.txt
Normal file
3
u_skins/meta/character_1079.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Yagami Light
|
||||
TheGamer
|
||||
CC BY-NC-SA 3.0
|
@ -1,3 +1,3 @@
|
||||
name = "Gangnam Style",
|
||||
author = "Ferdi Napoli",
|
||||
comment = "CC BY-NC-SA 3.0",
|
||||
Wants
|
||||
Wants
|
||||
CC BY-SA 3.0
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user