mirror of
https://github.com/yawaflua/spworlds-csharp-library.git
synced 2025-12-10 04:29:25 +02:00
Remove ignored files
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
namespace spworlds.Types;
|
||||
|
||||
public class PaymentData
|
||||
{
|
||||
public int Amount;
|
||||
public string RedirectUrl;
|
||||
public string WebHookUrl;
|
||||
public string Data;
|
||||
namespace spworlds.Types;
|
||||
|
||||
public class PaymentData
|
||||
{
|
||||
public int Amount;
|
||||
public string RedirectUrl;
|
||||
public string WebHookUrl;
|
||||
public string Data;
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
namespace spworlds.Types;
|
||||
|
||||
public enum SkinPart
|
||||
{
|
||||
face,
|
||||
front,
|
||||
front_full,
|
||||
head,
|
||||
bust,
|
||||
full,
|
||||
skin
|
||||
}
|
||||
namespace spworlds.Types;
|
||||
|
||||
public enum SkinPart
|
||||
{
|
||||
face,
|
||||
front,
|
||||
front_full,
|
||||
head,
|
||||
bust,
|
||||
full,
|
||||
skin
|
||||
}
|
||||
|
||||
@@ -1,37 +1,37 @@
|
||||
using spworlds;
|
||||
using System.Text.Json.Nodes;
|
||||
namespace spworlds.Types;
|
||||
|
||||
public class User
|
||||
{
|
||||
public string Name { get; }
|
||||
public string Uuid { get; }
|
||||
public JsonNode profile { get; }
|
||||
|
||||
public bool IsPlayer() => Name != null ? true : false;
|
||||
|
||||
public User(string name, string uuid, JsonNode profile)
|
||||
{
|
||||
Name = name;
|
||||
Uuid = uuid;
|
||||
this.profile = profile;
|
||||
}
|
||||
|
||||
public static async Task<User> CreateUser(string name)
|
||||
{
|
||||
string uuid;
|
||||
JsonNode profile;
|
||||
using(HttpClient client = new())
|
||||
{
|
||||
uuid = (string)JsonNode.Parse(await client.GetStringAsync($"https://api.mojang.com/users/profiles/minecraft/{name}"))["id"];
|
||||
profile = JsonNode.Parse(await client.GetStringAsync($"https://sessionserver.mojang.com/session/minecraft/profile/{uuid}"));
|
||||
}
|
||||
User user = new(name, uuid, profile);
|
||||
return user;
|
||||
}
|
||||
|
||||
public string GetSkinPart(SkinPart skinPart, string size = "64")
|
||||
{
|
||||
return (string)$"https://visage.surgeplay.com/{skinPart}/{size}/{this.profile["profileId"]}";
|
||||
}
|
||||
}
|
||||
using spworlds;
|
||||
using System.Text.Json.Nodes;
|
||||
namespace spworlds.Types;
|
||||
|
||||
public class User
|
||||
{
|
||||
public string Name { get; }
|
||||
public string Uuid { get; }
|
||||
public JsonNode profile { get; }
|
||||
|
||||
public bool IsPlayer() => Name != null ? true : false;
|
||||
|
||||
public User(string name, string uuid, JsonNode profile)
|
||||
{
|
||||
Name = name;
|
||||
Uuid = uuid;
|
||||
this.profile = profile;
|
||||
}
|
||||
|
||||
public static async Task<User> CreateUser(string name)
|
||||
{
|
||||
string uuid;
|
||||
JsonNode profile;
|
||||
using(HttpClient client = new())
|
||||
{
|
||||
uuid = (string)JsonNode.Parse(await client.GetStringAsync($"https://api.mojang.com/users/profiles/minecraft/{name}"))["id"];
|
||||
profile = JsonNode.Parse(await client.GetStringAsync($"https://sessionserver.mojang.com/session/minecraft/profile/{uuid}"));
|
||||
}
|
||||
User user = new(name, uuid, profile);
|
||||
return user;
|
||||
}
|
||||
|
||||
public string GetSkinPart(SkinPart skinPart, string size = "64")
|
||||
{
|
||||
return (string)$"https://visage.surgeplay.com/{skinPart}/{size}/{this.profile["profileId"]}";
|
||||
}
|
||||
}
|
||||
|
||||
23
src/bin/Debug/net6.0/spworlds.deps.json
Normal file
23
src/bin/Debug/net6.0/spworlds.deps.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"runtimeTarget": {
|
||||
"name": ".NETCoreApp,Version=v6.0",
|
||||
"signature": ""
|
||||
},
|
||||
"compilationOptions": {},
|
||||
"targets": {
|
||||
".NETCoreApp,Version=v6.0": {
|
||||
"spworlds/1.0.4": {
|
||||
"runtime": {
|
||||
"spworlds.dll": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"spworlds/1.0.4": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
src/bin/Debug/net6.0/spworlds.dll
Normal file
BIN
src/bin/Debug/net6.0/spworlds.dll
Normal file
Binary file not shown.
BIN
src/bin/Debug/net6.0/spworlds.pdb
Normal file
BIN
src/bin/Debug/net6.0/spworlds.pdb
Normal file
Binary file not shown.
BIN
src/bin/Debug/spworlds.1.0.1.nupkg
Normal file
BIN
src/bin/Debug/spworlds.1.0.1.nupkg
Normal file
Binary file not shown.
BIN
src/bin/Debug/spworlds.1.0.4.nupkg
Normal file
BIN
src/bin/Debug/spworlds.1.0.4.nupkg
Normal file
Binary file not shown.
BIN
src/obj/Debug/net6.0/ref/spworlds.dll
Normal file
BIN
src/obj/Debug/net6.0/ref/spworlds.dll
Normal file
Binary file not shown.
BIN
src/obj/Debug/net6.0/refint/spworlds.dll
Normal file
BIN
src/obj/Debug/net6.0/refint/spworlds.dll
Normal file
Binary file not shown.
@@ -14,12 +14,12 @@ using System.Reflection;
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyDescriptionAttribute("данная библиотека предназначена для работы с сайтом spworlds. Ознакомиться с доку" +
|
||||
"ментацией можно в гитхабе проекта")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.1.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.1")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.4.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.4")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("spworlds")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("spworlds")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.1.0")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.4.0")]
|
||||
[assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/Mih4n/spworlds")]
|
||||
|
||||
// Создано классом WriteCodeFragment MSBuild.
|
||||
// Generated by the MSBuild WriteCodeFragment class.
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
3b79596e0f193799e87c2d642144700f8551bcf8
|
||||
4fc85608e250b55334138dc0a2960a1ccc317f15
|
||||
|
||||
@@ -2,3 +2,10 @@ C:\Users\losev\OneDrive\Рабочий стол\spworlds\spworlds-csharp-library
|
||||
C:\Users\losev\OneDrive\Рабочий стол\spworlds\spworlds-csharp-library\src\obj\Debug\net6.0\spworlds.AssemblyInfoInputs.cache
|
||||
C:\Users\losev\OneDrive\Рабочий стол\spworlds\spworlds-csharp-library\src\obj\Debug\net6.0\spworlds.AssemblyInfo.cs
|
||||
C:\Users\losev\OneDrive\Рабочий стол\spworlds\spworlds-csharp-library\src\obj\Debug\net6.0\spworlds.csproj.CoreCompileInputs.cache
|
||||
C:\Users\losev\OneDrive\Рабочий стол\spworlds\spworlds-csharp-library\src\bin\Debug\net6.0\spworlds.deps.json
|
||||
C:\Users\losev\OneDrive\Рабочий стол\spworlds\spworlds-csharp-library\src\bin\Debug\net6.0\spworlds.dll
|
||||
C:\Users\losev\OneDrive\Рабочий стол\spworlds\spworlds-csharp-library\src\bin\Debug\net6.0\spworlds.pdb
|
||||
C:\Users\losev\OneDrive\Рабочий стол\spworlds\spworlds-csharp-library\src\obj\Debug\net6.0\spworlds.dll
|
||||
C:\Users\losev\OneDrive\Рабочий стол\spworlds\spworlds-csharp-library\src\obj\Debug\net6.0\refint\spworlds.dll
|
||||
C:\Users\losev\OneDrive\Рабочий стол\spworlds\spworlds-csharp-library\src\obj\Debug\net6.0\spworlds.pdb
|
||||
C:\Users\losev\OneDrive\Рабочий стол\spworlds\spworlds-csharp-library\src\obj\Debug\net6.0\ref\spworlds.dll
|
||||
|
||||
BIN
src/obj/Debug/net6.0/spworlds.dll
Normal file
BIN
src/obj/Debug/net6.0/spworlds.dll
Normal file
Binary file not shown.
BIN
src/obj/Debug/net6.0/spworlds.pdb
Normal file
BIN
src/obj/Debug/net6.0/spworlds.pdb
Normal file
Binary file not shown.
20
src/obj/Debug/spworlds.1.0.1.nuspec
Normal file
20
src/obj/Debug/spworlds.1.0.1.nuspec
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
|
||||
<metadata>
|
||||
<id>spworlds</id>
|
||||
<version>1.0.1</version>
|
||||
<authors>Mih4n</authors>
|
||||
<license type="expression">MIT</license>
|
||||
<licenseUrl>https://licenses.nuget.org/MIT</licenseUrl>
|
||||
<readme>README.md</readme>
|
||||
<description>данная библиотека предназначена для работы с сайтом spworlds. Ознакомиться с документацией можно в гитхабе проекта</description>
|
||||
<repository url="https://github.com/Mih4n/spworlds" />
|
||||
<dependencies>
|
||||
<group targetFramework="net6.0" />
|
||||
</dependencies>
|
||||
</metadata>
|
||||
<files>
|
||||
<file src="C:\Users\losev\OneDrive\Рабочий стол\spworlds\spworlds-csharp-library\src\bin\Debug\net6.0\spworlds.dll" target="lib\net6.0\spworlds.dll" />
|
||||
<file src="C:\Users\losev\OneDrive\Рабочий стол\spworlds\spworlds-csharp-library\src\README.md" target="\README.md" />
|
||||
</files>
|
||||
</package>
|
||||
20
src/obj/Debug/spworlds.1.0.4.nuspec
Normal file
20
src/obj/Debug/spworlds.1.0.4.nuspec
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
|
||||
<metadata>
|
||||
<id>spworlds</id>
|
||||
<version>1.0.4</version>
|
||||
<authors>Mih4n</authors>
|
||||
<license type="expression">MIT</license>
|
||||
<licenseUrl>https://licenses.nuget.org/MIT</licenseUrl>
|
||||
<readme>README.md</readme>
|
||||
<description>данная библиотека предназначена для работы с сайтом spworlds. Ознакомиться с документацией можно в гитхабе проекта</description>
|
||||
<repository url="https://github.com/Mih4n/spworlds" />
|
||||
<dependencies>
|
||||
<group targetFramework="net6.0" />
|
||||
</dependencies>
|
||||
</metadata>
|
||||
<files>
|
||||
<file src="C:\Users\losev\OneDrive\Рабочий стол\spworlds\spworlds-csharp-library\src\bin\Debug\net6.0\spworlds.dll" target="lib\net6.0\spworlds.dll" />
|
||||
<file src="C:\Users\losev\OneDrive\Рабочий стол\spworlds\spworlds-csharp-library\src\README.md" target="\README.md" />
|
||||
</files>
|
||||
</package>
|
||||
@@ -12,7 +12,7 @@
|
||||
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}
|
||||
},
|
||||
"project": {
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.4",
|
||||
"restore": {
|
||||
"projectUniqueName": "C:\\Users\\losev\\OneDrive\\Рабочий стол\\spworlds\\spworlds-csharp-library\\src\\spworlds.csproj",
|
||||
"projectName": "spworlds",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"version": 2,
|
||||
"dgSpecHash": "BcScqcBajGeCpumrD0XHCVXubY8iGSvVtyfgtqEr1b+ZFER5tFI/jvxsd7fM+aNBX0ZgxKhrR3Trd/3mtyDYsQ==",
|
||||
"dgSpecHash": "AxJ7bOs4Z9l6KXy2n7OAAZz8U1o7V0AmVQguUWJj3EBLeI36WOpEuQH9YGUPP6QALFeUBw9dZ2Q8IM0H/2kaqA==",
|
||||
"success": true,
|
||||
"projectFilePath": "C:\\Users\\losev\\OneDrive\\Рабочий стол\\spworlds\\spworlds-csharp-library\\src\\spworlds.csproj",
|
||||
"expectedPackageFiles": [],
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
},
|
||||
"projects": {
|
||||
"C:\\Users\\losev\\OneDrive\\Рабочий стол\\spworlds\\spworlds-csharp-library\\src\\spworlds.csproj": {
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.4",
|
||||
"restore": {
|
||||
"projectUniqueName": "C:\\Users\\losev\\OneDrive\\Рабочий стол\\spworlds\\spworlds-csharp-library\\src\\spworlds.csproj",
|
||||
"projectName": "spworlds",
|
||||
|
||||
240
src/spworlds.cs
240
src/spworlds.cs
@@ -1,120 +1,120 @@
|
||||
using System.Net.Http.Headers;
|
||||
using System.Text.Json;
|
||||
using System.Text;
|
||||
using System.Text.Json.Nodes;
|
||||
using System.Security.Cryptography;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
using spworlds.Types;
|
||||
namespace spworlds;
|
||||
|
||||
public class SPWorlds
|
||||
{
|
||||
private readonly HttpClient client;
|
||||
private string token;
|
||||
|
||||
public SPWorlds(string id, string token)
|
||||
{
|
||||
client = new HttpClient();
|
||||
var BearerToken = $"{id}:{token}";
|
||||
this.token = token;
|
||||
string Base64BearerToken = Convert.ToBase64String(Encoding.UTF8.GetBytes(BearerToken));
|
||||
|
||||
client.BaseAddress = new Uri("https://spworlds.ru/api/public/");
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Base64BearerToken);
|
||||
}
|
||||
|
||||
private async Task<bool> ValidateWebHook(string webHook, string bodyHash)
|
||||
{
|
||||
byte[] body = Encoding.UTF8.GetBytes(bodyHash);
|
||||
byte[] webhook = Encoding.UTF8.GetBytes(webHook);
|
||||
var key = new HMACSHA256(Encoding.UTF8.GetBytes(token));
|
||||
string webhook64 = Convert.ToBase64String(key.ComputeHash(webhook));
|
||||
return webhook64.Equals(body);
|
||||
}
|
||||
|
||||
private async Task<string> SendRequest(string endpoint, Boolean getResult = true, Dictionary<string, object>? body = null)
|
||||
{
|
||||
string respond;
|
||||
string jsonBody;
|
||||
|
||||
if (body == null)
|
||||
{
|
||||
return respond = client.GetAsync(endpoint).Result.Content.ReadAsStringAsync().Result;
|
||||
}
|
||||
else
|
||||
{
|
||||
jsonBody = JsonSerializer.Serialize(body);
|
||||
var payload = new StringContent(jsonBody, Encoding.UTF8, "application/json");
|
||||
|
||||
if (getResult)
|
||||
return respond = client.PostAsync(endpoint, payload).Result.Content.ReadAsStringAsync().Result;
|
||||
else
|
||||
await client.PostAsync(endpoint, payload);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public async Task<int> GetBalance()
|
||||
{
|
||||
string respond = await SendRequest("card");
|
||||
|
||||
var card = JsonObject.Parse(respond);
|
||||
var balance = card["balance"];
|
||||
|
||||
return (int)balance;
|
||||
}
|
||||
|
||||
public async Task CreateTransaction(string receiver, int amount, string comment)
|
||||
{
|
||||
var transitionInfo = new Dictionary<string, object>
|
||||
{
|
||||
{ "receiver", receiver },
|
||||
{ "amount", amount },
|
||||
{ "comment", comment }
|
||||
};
|
||||
|
||||
await SendRequest(endpoint: "transactions", body: transitionInfo);
|
||||
}
|
||||
|
||||
public async Task<User> GetUser(string discordId)
|
||||
{
|
||||
string userName = (string)JsonObject.Parse(await SendRequest($"users/{discordId}"))["username"];
|
||||
User user = await User.CreateUser(userName);
|
||||
return (User)user;
|
||||
}
|
||||
|
||||
public async Task<string> InitPayment(int amount, string redirectUrl, string webhookUrl, string data)
|
||||
{
|
||||
var paymentInfo = new Dictionary<string, object>
|
||||
{
|
||||
{ "amount", amount },
|
||||
{ "redirectUrl", redirectUrl },
|
||||
{ "webhookUrl", webhookUrl },
|
||||
{ "data", data }
|
||||
};
|
||||
|
||||
var payment = JsonObject.Parse(await SendRequest(endpoint: $"payment", body: paymentInfo));
|
||||
var url = payment["url"];
|
||||
|
||||
return (string)url;
|
||||
}
|
||||
|
||||
public async Task<string> InitPayment(PaymentData paymentData)
|
||||
{
|
||||
var paymentInfo = new Dictionary<string, object>
|
||||
{
|
||||
{ "amount", paymentData.Amount },
|
||||
{ "redirectUrl", paymentData.RedirectUrl },
|
||||
{ "webhookUrl", paymentData.WebHookUrl },
|
||||
{ "data", paymentData.Data }
|
||||
};
|
||||
|
||||
var payment = JsonObject.Parse(await SendRequest(endpoint: $"payment", body: paymentInfo));
|
||||
var url = payment["url"];
|
||||
|
||||
return (string)url;
|
||||
}
|
||||
}
|
||||
|
||||
using System.Net.Http.Headers;
|
||||
using System.Text.Json;
|
||||
using System.Text;
|
||||
using System.Text.Json.Nodes;
|
||||
using System.Security.Cryptography;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
using spworlds.Types;
|
||||
namespace spworlds;
|
||||
|
||||
public class SPWorlds
|
||||
{
|
||||
private readonly HttpClient client;
|
||||
private string token;
|
||||
|
||||
public SPWorlds(string id, string token)
|
||||
{
|
||||
client = new HttpClient();
|
||||
var BearerToken = $"{id}:{token}";
|
||||
this.token = token;
|
||||
string Base64BearerToken = Convert.ToBase64String(Encoding.UTF8.GetBytes(BearerToken));
|
||||
|
||||
client.BaseAddress = new Uri("https://spworlds.ru/api/public/");
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Base64BearerToken);
|
||||
}
|
||||
|
||||
private async Task<bool> ValidateWebHook(string webHook, string bodyHash)
|
||||
{
|
||||
byte[] body = Encoding.UTF8.GetBytes(bodyHash);
|
||||
byte[] webhook = Encoding.UTF8.GetBytes(webHook);
|
||||
var key = new HMACSHA256(Encoding.UTF8.GetBytes(token));
|
||||
string webhook64 = Convert.ToBase64String(key.ComputeHash(webhook));
|
||||
return webhook64.Equals(body);
|
||||
}
|
||||
|
||||
private async Task<string> SendRequest(string endpoint, Boolean getResult = true, Dictionary<string, object>? body = null)
|
||||
{
|
||||
string respond;
|
||||
string jsonBody;
|
||||
|
||||
if (body == null)
|
||||
{
|
||||
return respond = client.GetAsync(endpoint).Result.Content.ReadAsStringAsync().Result;
|
||||
}
|
||||
else
|
||||
{
|
||||
jsonBody = JsonSerializer.Serialize(body);
|
||||
var payload = new StringContent(jsonBody, Encoding.UTF8, "application/json");
|
||||
|
||||
if (getResult)
|
||||
return respond = client.PostAsync(endpoint, payload).Result.Content.ReadAsStringAsync().Result;
|
||||
else
|
||||
await client.PostAsync(endpoint, payload);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public async Task<int> GetBalance()
|
||||
{
|
||||
string respond = await SendRequest("card");
|
||||
|
||||
var card = JsonObject.Parse(respond);
|
||||
var balance = card["balance"];
|
||||
|
||||
return (int)balance;
|
||||
}
|
||||
|
||||
public async Task CreateTransaction(string receiver, int amount, string comment)
|
||||
{
|
||||
var transitionInfo = new Dictionary<string, object>
|
||||
{
|
||||
{ "receiver", receiver },
|
||||
{ "amount", amount },
|
||||
{ "comment", comment }
|
||||
};
|
||||
|
||||
await SendRequest(endpoint: "transactions", body: transitionInfo);
|
||||
}
|
||||
|
||||
public async Task<User> GetUser(string discordId)
|
||||
{
|
||||
string userName = (string)JsonObject.Parse(await SendRequest($"users/{discordId}"))["username"];
|
||||
User user = await User.CreateUser(userName);
|
||||
return (User)user;
|
||||
}
|
||||
|
||||
public async Task<string> InitPayment(int amount, string redirectUrl, string webhookUrl, string data)
|
||||
{
|
||||
var paymentInfo = new Dictionary<string, object>
|
||||
{
|
||||
{ "amount", amount },
|
||||
{ "redirectUrl", redirectUrl },
|
||||
{ "webhookUrl", webhookUrl },
|
||||
{ "data", data }
|
||||
};
|
||||
|
||||
var payment = JsonObject.Parse(await SendRequest(endpoint: $"payment", body: paymentInfo));
|
||||
var url = payment["url"];
|
||||
|
||||
return (string)url;
|
||||
}
|
||||
|
||||
public async Task<string> InitPayment(PaymentData paymentData)
|
||||
{
|
||||
var paymentInfo = new Dictionary<string, object>
|
||||
{
|
||||
{ "amount", paymentData.Amount },
|
||||
{ "redirectUrl", paymentData.RedirectUrl },
|
||||
{ "webhookUrl", paymentData.WebHookUrl },
|
||||
{ "data", paymentData.Data }
|
||||
};
|
||||
|
||||
var payment = JsonObject.Parse(await SendRequest(endpoint: $"payment", body: paymentInfo));
|
||||
var url = payment["url"];
|
||||
|
||||
return (string)url;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<PackageId>spworlds</PackageId>
|
||||
<Description>данная библиотека предназначена для работы с сайтом spworlds. Ознакомиться с документацией можно в гитхабе проекта</Description>
|
||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||
<Version>1.0.1</Version>
|
||||
<Version>1.0.4</Version>
|
||||
<Authors>Mih4n</Authors>
|
||||
<Company>Mih4n</Company>
|
||||
<RepositoryUrl>https://github.com/Mih4n/spworlds</RepositoryUrl>
|
||||
|
||||
Reference in New Issue
Block a user