diff --git a/app/Console/Commands/MigratePlayersTable.php b/app/Console/Commands/MigratePlayersTable.php
new file mode 100644
index 00000000..6ab32ac2
--- /dev/null
+++ b/app/Console/Commands/MigratePlayersTable.php
@@ -0,0 +1,64 @@
+get();
+ $count = $players->count();
+
+ if ($count == 0) {
+ $this->info('No need to update.');
+ return;
+ }
+
+ $this->info('We are going to update your `players` table. Please wait...');
+ $bar = $this->output->createProgressBar($count);
+
+ $players->each(function ($player) use ($bar) {
+ $player->tid_skin = $player->preference == 'default'
+ ? $player->tid_steve
+ : $player->tid_alex;
+ $player->save();
+
+ $bar->advance();
+ });
+ $bar->finish();
+
+ $this->info("\nCongratulations! We've updated $count rows.");
+ }
+}
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
index 96922bbc..9058dd75 100644
--- a/app/Console/Kernel.php
+++ b/app/Console/Kernel.php
@@ -16,6 +16,7 @@ class Kernel extends ConsoleKernel
Commands\Inspire::class,
Commands\KeyRandomCommand::class,
Commands\SaltRandomCommand::class,
+ Commands\MigratePlayersTable::class,
];
/**
diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php
index 54534e1c..7b76037d 100644
--- a/app/Http/Controllers/AdminController.php
+++ b/app/Http/Controllers/AdminController.php
@@ -279,7 +279,7 @@ class AdminController extends Controller
$isSpecifiedUser = $request->has('uid');
if ($isSpecifiedUser) {
- $players = Player::select(['pid', 'uid', 'player_name', 'preference', 'tid_steve', 'tid_alex', 'tid_cape', 'last_modified'])
+ $players = Player::select(['pid', 'uid', 'player_name', 'tid_skin', 'tid_cape', 'last_modified'])
->where('uid', intval($request->input('uid')))
->get();
} else {
@@ -289,11 +289,10 @@ class AdminController extends Controller
$page = $request->input('page', 1);
$perPage = $request->input('perPage', 10);
- $players = Player::select(['pid', 'uid', 'player_name', 'preference', 'tid_steve', 'tid_alex', 'tid_cape', 'last_modified'])
+ $players = Player::select(['pid', 'uid', 'player_name', 'tid_skin', 'tid_cape', 'last_modified'])
->where('pid', 'like', '%' . $search . '%')
->orWhere('uid', 'like', '%' . $search . '%')
->orWhere('player_name', 'like', '%' . $search . '%')
- ->orWhere('preference', 'like', '%' . $search . '%')
->orderBy($sortField, $sortType)
->offset(($page - 1) * $perPage)
->limit($perPage)
@@ -425,25 +424,16 @@ class AdminController extends Controller
}
}
- if ($action == "preference") {
+ if ($action == "texture") {
$this->validate($request, [
- 'preference' => 'required|preference'
- ]);
-
- $player->setPreference($request->input('preference'));
-
- return json(trans('admin.players.preference.success', ['player' => $player->player_name, 'preference' => $request->input('preference')]), 0);
-
- } elseif ($action == "texture") {
- $this->validate($request, [
- 'model' => 'required|model',
- 'tid' => 'required|integer'
+ 'type' => 'required',
+ 'tid' => 'required|integer'
]);
if (! Texture::find($request->tid) && $request->tid != 0)
return json(trans('admin.players.textures.non-existent', ['tid' => $request->tid]), 1);
- $player->setTexture(['tid_'.$request->model => $request->tid]);
+ $player->setTexture(['tid_'.$request->type => $request->tid]);
return json(trans('admin.players.textures.success', ['player' => $player->player_name]), 0);
diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php
index 05f6e016..b3d1787b 100644
--- a/app/Http/Controllers/AuthController.php
+++ b/app/Http/Controllers/AuthController.php
@@ -138,7 +138,7 @@ class AuthController extends Controller
$player = new Player;
$player->uid = $user->uid;
$player->player_name = $request->get('player_name');
- $player->preference = 'default';
+ $player->tid_skin = 0;
$player->last_modified = get_datetime_string();
$player->save();
diff --git a/app/Http/Controllers/PlayerController.php b/app/Http/Controllers/PlayerController.php
index bd4d38a9..d13e7c7e 100644
--- a/app/Http/Controllers/PlayerController.php
+++ b/app/Http/Controllers/PlayerController.php
@@ -42,7 +42,7 @@ class PlayerController extends Controller
});
$this->middleware([CheckPlayerExist::class, CheckPlayerOwner::class], [
- 'only' => ['delete', 'rename', 'setTexture', 'clearTexture', 'setPreference']
+ 'only' => ['delete', 'rename', 'setTexture', 'clearTexture']
]);
}
@@ -58,7 +58,7 @@ class PlayerController extends Controller
{
return Auth::user()
->players()
- ->select('pid', 'player_name', 'preference', 'tid_steve', 'tid_alex')
+ ->select('pid', 'player_name', 'tid_skin', 'tid_cape')
->get();
}
@@ -86,7 +86,7 @@ class PlayerController extends Controller
$player->uid = $user->uid;
$player->player_name = $request->input('player_name');
- $player->preference = "default";
+ $player->tid_skin = 0;
$player->last_modified = get_datetime_string();
$player->save();
@@ -153,24 +153,17 @@ class PlayerController extends Controller
return json(trans('skinlib.un-existent'), 6);
}
- $fieldName = "tid_{$texture->type}";
+ $fieldName = $texture->type == 'cape' ? 'tid_cape' : 'tid_skin';
$this->player->setTexture([$fieldName => $value]);
}
- // When user applies an alex skin to a newly added player,
- // which textures and model preference are all default value,
- // we will automatically set the player's model preference to "slim".
- if ($this->player->preference == 'default' && $this->player->tid_steve == 0 && $this->player->tid_alex != 0) {
- $this->player->setPreference('slim');
- }
-
return json(trans('user.player.set.success', ['name' => $this->player->player_name]), 0);
}
public function clearTexture(Request $request)
{
- $types = array_filter(['steve', 'alex', 'cape'], function ($type) use ($request) {
+ $types = array_filter(['skin', 'cape'], function ($type) use ($request) {
return $request->input($type);
});
@@ -179,15 +172,4 @@ class PlayerController extends Controller
return json(trans('user.player.clear.success', ['name' => $this->player->player_name]), 0);
}
- public function setPreference(Request $request)
- {
- $this->validate($request, [
- 'preference' => 'required|preference'
- ]);
-
- $this->player->setPreference($request->preference);
-
- return json(trans('user.player.preference.success', ['name' => $this->player->player_name, 'preference' => $request->preference]), 0);
- }
-
}
diff --git a/app/Http/Controllers/SkinlibController.php b/app/Http/Controllers/SkinlibController.php
index 0b6aac45..f1aa1160 100644
--- a/app/Http/Controllers/SkinlibController.php
+++ b/app/Http/Controllers/SkinlibController.php
@@ -271,7 +271,7 @@ class SkinlibController extends Controller
return json(trans('skinlib.upload.lack-score'), 1);
}
- $type = $t->type;
+ $type = $t->type == 'cape' ? 'cape' : 'skin';
Player::where("tid_$type", $t->tid)
->where('uid', '<>', session('uid'))
->get()
diff --git a/app/Http/Controllers/TextureController.php b/app/Http/Controllers/TextureController.php
index 97c4b01a..dbc0952c 100644
--- a/app/Http/Controllers/TextureController.php
+++ b/app/Http/Controllers/TextureController.php
@@ -70,19 +70,9 @@ class TextureController extends Controller
return $this->texture($hash);
}
- public function skin($player_name, $model = "")
+ public function skin($player_name)
{
- $player = $this->getPlayerInstance($player_name);
-
- $model_preference = ($player->getPreference() == "default") ? "steve" : "alex";
- $model = ($model == "") ? $model_preference : $model;
-
- return $this->getBinaryTextureFromPlayer($player_name, $model);
- }
-
- public function skinWithModel($model, $player_name)
- {
- return $this->skin($player_name, $model);
+ return $this->getBinaryTextureFromPlayer($player_name, 'skin');
}
public function cape($player_name)
@@ -95,7 +85,7 @@ class TextureController extends Controller
*
* @param string $player_name
* @param string $type "steve" or "alex" or "cape".
- * @return void|Response
+ * @return Response
*/
protected function getBinaryTextureFromPlayer($player_name, $type)
{
diff --git a/app/Models/Player.php b/app/Models/Player.php
index fd826da7..e59a572e 100644
--- a/app/Models/Player.php
+++ b/app/Models/Player.php
@@ -18,17 +18,14 @@ class Player extends Model
const CSL_API = 0;
const USM_API = 1;
- /**
- * Set of models.
- */
- protected static $models = ['steve', 'alex', 'cape'];
+ protected static $types = ['skin', 'cape'];
/**
* Properties for Eloquent Model.
*/
public $primaryKey = 'pid';
public $timestamps = false;
- protected $fillable = ['uid', 'player_name', 'preference', 'last_modified'];
+ protected $fillable = ['uid', 'player_name', 'last_modified'];
/**
* The attributes that should be cast to native types.
@@ -38,8 +35,7 @@ class Player extends Model
protected $casts = [
'pid' => 'integer',
'uid' => 'integer',
- 'tid_steve' => 'integer',
- 'tid_alex' => 'integer',
+ 'tid_skin' => 'integer',
'tid_cape' => 'integer',
];
@@ -63,18 +59,27 @@ class Player extends Model
return $this->belongsTo('App\Models\User', 'uid');
}
+ public function getTidSkinAttribute($value)
+ {
+ if ($value == -1) {
+ $this->tid_skin = $value = $this->preference == 'default'
+ ? $this->tid_steve
+ : $this->tid_alex;
+ $this->save();
+ }
+
+ return $value;
+ }
+
/**
* Get specific texture of player.
*
- * @param string $type "steve" or "alex" or "cape".
+ * @param string $type "skin" or "cape".
* @return string The sha256 hash of texture file.
*/
public function getTexture($type)
{
- if ($type == "skin")
- $type = ($this->getPreference() == "default") ? "steve" : "alex";
-
- if (in_array($type, self::$models)) {
+ if (in_array($type, self::$types)) {
return Texture::find($this["tid_$type"])['hash'];
}
@@ -89,8 +94,8 @@ class Player extends Model
*/
public function setTexture(Array $tids)
{
- foreach (self::$models as $model) {
- $property = "tid_$model";
+ foreach (self::$types as $type) {
+ $property = "tid_$type";
if (isset($tids[$property])) {
$this->$property = $tids[$property];
@@ -113,8 +118,8 @@ class Player extends Model
*/
public function checkForInvalidTextures()
{
- foreach (self::$models as $model) {
- $property = "tid_$model";
+ foreach (self::$types as $type) {
+ $property = "tid_$type";
if (! Texture::find($this->$property)) {
// reset texture
@@ -148,34 +153,6 @@ class Player extends Model
return $this;
}
- /**
- * Set preferred model for the player.
- *
- * @param string $type "slim" or "default".
- * @return $this
- */
- public function setPreference($type)
- {
- $this->update([
- 'preference' => $type,
- 'last_modified' => get_datetime_string()
- ]);
-
- event(new PlayerProfileUpdated($this));
-
- return $this;
- }
-
- /**
- * Get model preference of the player.
- *
- * @return string
- */
- public function getPreference()
- {
- return $this['preference'];
- }
-
/**
* Rename the player.
*
@@ -244,20 +221,19 @@ class Player extends Model
{
$json[($api_type == self::CSL_API) ? 'username' : 'player_name'] = $this->player_name;
- $model = $this->getPreference();
- $sec_model = ($model == 'default') ? 'slim' : 'default';
+ $texture = Texture::find($this->tid_skin);
+ $model = empty($texture) ? 'default' : ($texture->type === 'steve' ? 'default' : 'slim');
if ($api_type == self::USM_API) {
$json['last_update'] = strtotime($this->last_modified);
- $json['model_preference'] = [$model, $sec_model];
+ $json['model_preference'] = [$model];
}
- if ($this->getTexture('steve') || $this->getTexture('alex')) {
- // Skins dict order by preference model
- $json['skins'][$model] = $this->getTexture($model == "default" ? "steve" : "alex");
- $json['skins'][$sec_model] = $this->getTexture($sec_model == "default" ? "steve" : "alex");
+ $skinHash = $this->getTexture('skin');
+ if ($model == 'slim') {
+ $json['skins']['slim'] = $skinHash;
}
-
+ $json['skins']['default'] = $skinHash;
$json['cape'] = $this->getTexture('cape');
return json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
diff --git a/app/Providers/ValidatorExtendServiceProvider.php b/app/Providers/ValidatorExtendServiceProvider.php
index a0967280..39f20951 100644
--- a/app/Providers/ValidatorExtendServiceProvider.php
+++ b/app/Providers/ValidatorExtendServiceProvider.php
@@ -46,14 +46,6 @@ class ValidatorExtendServiceProvider extends ServiceProvider
return preg_match($regexp, $value);
});
- Validator::extend('preference', function ($a, $value, $p, $v) {
- return preg_match('/^(default|slim)$/', $value);
- });
-
- Validator::extend('model', function ($a, $value, $p, $v) {
- return preg_match('/^(steve|alex|cape)$/', $value);
- });
-
$this->registerExpiredRules();
}
diff --git a/composer.json b/composer.json
index 64317405..f50114e2 100644
--- a/composer.json
+++ b/composer.json
@@ -13,7 +13,8 @@
"devitek/yaml-translation": "^4.1.0",
"composer/semver": "^1.4",
"mews/captcha": "^2.2",
- "guzzlehttp/guzzle": "^6.3"
+ "guzzlehttp/guzzle": "^6.3",
+ "doctrine/dbal": "^2.9"
},
"require-dev": {
"fzaninotto/faker": "~1.4",
diff --git a/composer.lock b/composer.lock
index 81027b42..96993c84 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "9dffd7e330ca90a80760f9e44a3c9c50",
+ "content-hash": "425b8e682534d97b800252cf1ec95152",
"packages": [
{
"name": "composer/semver",
@@ -114,6 +114,237 @@
"description": "Add YAML file support to Laravel TranslationServiceProvider",
"time": "2017-09-28T12:37:17+00:00"
},
+ {
+ "name": "doctrine/cache",
+ "version": "v1.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/cache.git",
+ "reference": "d768d58baee9a4862ca783840eca1b9add7a7f57"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/cache/zipball/d768d58baee9a4862ca783840eca1b9add7a7f57",
+ "reference": "d768d58baee9a4862ca783840eca1b9add7a7f57",
+ "shasum": ""
+ },
+ "require": {
+ "php": "~7.1"
+ },
+ "conflict": {
+ "doctrine/common": ">2.2,<2.4"
+ },
+ "require-dev": {
+ "alcaeus/mongo-php-adapter": "^1.1",
+ "doctrine/coding-standard": "^4.0",
+ "mongodb/mongodb": "^1.1",
+ "phpunit/phpunit": "^7.0",
+ "predis/predis": "~1.0"
+ },
+ "suggest": {
+ "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Caching library offering an object-oriented API for many cache backends",
+ "homepage": "https://www.doctrine-project.org",
+ "keywords": [
+ "cache",
+ "caching"
+ ],
+ "time": "2018-08-21T18:01:43+00:00"
+ },
+ {
+ "name": "doctrine/dbal",
+ "version": "v2.9.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/dbal.git",
+ "reference": "22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/dbal/zipball/22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9",
+ "reference": "22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/cache": "^1.0",
+ "doctrine/event-manager": "^1.0",
+ "ext-pdo": "*",
+ "php": "^7.1"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^5.0",
+ "jetbrains/phpstorm-stubs": "^2018.1.2",
+ "phpstan/phpstan": "^0.10.1",
+ "phpunit/phpunit": "^7.4",
+ "symfony/console": "^2.0.5|^3.0|^4.0",
+ "symfony/phpunit-bridge": "^3.4.5|^4.0.5"
+ },
+ "suggest": {
+ "symfony/console": "For helpful console commands such as SQL execution and import of files."
+ },
+ "bin": [
+ "bin/doctrine-dbal"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.9.x-dev",
+ "dev-develop": "3.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\DBAL\\": "lib/Doctrine/DBAL"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ }
+ ],
+ "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.",
+ "homepage": "https://www.doctrine-project.org/projects/dbal.html",
+ "keywords": [
+ "abstraction",
+ "database",
+ "dbal",
+ "mysql",
+ "persistence",
+ "pgsql",
+ "php",
+ "queryobject"
+ ],
+ "time": "2018-12-31T03:27:51+00:00"
+ },
+ {
+ "name": "doctrine/event-manager",
+ "version": "v1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/event-manager.git",
+ "reference": "a520bc093a0170feeb6b14e9d83f3a14452e64b3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/event-manager/zipball/a520bc093a0170feeb6b14e9d83f3a14452e64b3",
+ "reference": "a520bc093a0170feeb6b14e9d83f3a14452e64b3",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1"
+ },
+ "conflict": {
+ "doctrine/common": "<2.9@dev"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^4.0",
+ "phpunit/phpunit": "^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\": "lib/Doctrine/Common"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ },
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com"
+ }
+ ],
+ "description": "Doctrine Event Manager component",
+ "homepage": "https://www.doctrine-project.org/projects/event-manager.html",
+ "keywords": [
+ "event",
+ "eventdispatcher",
+ "eventmanager"
+ ],
+ "time": "2018-06-11T11:59:03+00:00"
+ },
{
"name": "doctrine/inflector",
"version": "v1.1.0",
diff --git a/database/factories/PlayerModelFactory.php b/database/factories/PlayerModelFactory.php
index 8a685f2f..244af476 100644
--- a/database/factories/PlayerModelFactory.php
+++ b/database/factories/PlayerModelFactory.php
@@ -6,16 +6,7 @@ $factory->define(Player::class, function (Faker\Generator $faker) {
return [
'uid' => factory(App\Models\User::class)->create()->uid,
'player_name' => $faker->firstName,
- 'preference' => 'default',
- 'last_modified' => $faker->dateTime
- ];
-});
-
-$factory->defineAs(Player::class, 'slim', function (Faker\Generator $faker) {
- return [
- 'uid' => factory(App\Models\User::class)->create()->uid,
- 'player_name' => $faker->firstName,
- 'preference' => 'slim',
+ 'tid_skin' => 0,
'last_modified' => $faker->dateTime
];
});
diff --git a/database/migrations/2018_08_21_105514_add_remember_token_to_users_table.php b/database/migrations/2018_08_21_105514_add_remember_token_to_users_table.php
index 8e72d419..95481068 100644
--- a/database/migrations/2018_08_21_105514_add_remember_token_to_users_table.php
+++ b/database/migrations/2018_08_21_105514_add_remember_token_to_users_table.php
@@ -26,16 +26,7 @@ class AddRememberTokenToUsersTable extends Migration
public function down()
{
Schema::table('users', function (Blueprint $table) {
- if (config('database.default') == 'sqlite') {
- // Dropping columns from a SQLite database requires `doctrine/dbal` dependency.
- // However, we won't install it because it's too hard to specify the version of
- // all the new dependencies exactly to make them support PHP ^5.5.9. Damn it.
- return;
- }
-
- Schema::table('users', function (Blueprint $table) {
- $table->dropColumn('remember_token');
- });
+ $table->dropColumn('remember_token');
});
}
}
diff --git a/database/migrations/2019_03_01_131420_add_tid_skin.php b/database/migrations/2019_03_01_131420_add_tid_skin.php
new file mode 100644
index 00000000..913a9c3f
--- /dev/null
+++ b/database/migrations/2019_03_01_131420_add_tid_skin.php
@@ -0,0 +1,34 @@
+integer('tid_skin')->default(-1);
+ $table->string('preference', 10)->nullable()->change();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('players', function (Blueprint $table) {
+ $table->dropColumn('tid_skin');
+ $table->string('preference', 10)->nullable(false)->change();
+ });
+ }
+}
diff --git a/resources/assets/src/components/admin/Players.vue b/resources/assets/src/components/admin/Players.vue
index 8272e2c7..15556a12 100644
--- a/resources/assets/src/components/admin/Players.vue
+++ b/resources/assets/src/components/admin/Players.vue
@@ -31,24 +31,12 @@
-
- {{ props.formattedRow[props.column.field] }}
-
-
-
-
-
-
-
-
+
@@ -33,20 +23,12 @@
>
PID
-
- {{ $t('user.player.preference.title') }}
-
-
-
- {{ $t('user.player.textures.steve') }}
-
+ {{ $t('general.skin') }}
+
-
+
- {{ $t('user.player.textures.alex') }}
-
-
-
-
-
- {{ $t('user.player.textures.cape') }}
+ {{ $t('general.cape') }}
-
+