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] }} - - - - - - - - +
@@ -150,7 +137,6 @@ export default { { field: 'pid', label: 'PID', type: 'number' }, { field: 'player_name', label: this.$t('general.player.player-name') }, { field: 'uid', label: this.$t('general.player.owner'), type: 'number' }, - { field: 'preference', label: this.$t('general.player.preference'), globalSearchDisabled: true }, { field: 'preview', label: this.$t('general.player.previews'), globalSearchDisabled: true, sortable: false }, { field: 'last_modified', label: this.$t('general.player.last-modified') }, { field: 'operations', label: this.$t('admin.operationsTitle'), globalSearchDisabled: true, sortable: false }, @@ -178,7 +164,7 @@ export default { }, textureChanges: { originalIndex: -1, - model: 'steve', + type: 'skin', tid: '', } }; @@ -214,14 +200,14 @@ export default { }, async changeTexture() { const player = this.players[this.textureChanges.originalIndex]; - const { model, tid } = this.textureChanges; + const { type, tid } = this.textureChanges; const { errno, msg } = await this.$http.post( '/admin/players?action=texture', - { pid: player.pid, model, tid } + { pid: player.pid, type, tid } ); if (errno === 0) { - player[`tid_${model}`] = tid; + player[`tid_${type}`] = tid; toastr.success(msg); $('.modal').modal('hide'); } else { @@ -250,19 +236,6 @@ export default { toastr.warning(msg); } }, - async togglePreference(player) { - const preference = player.preference === 'default' ? 'slim' : 'default'; - const { errno, msg } = await this.$http.post( - '/admin/players?action=preference', - { pid: player.pid, preference } - ); - if (errno === 0) { - player.preference = preference; - toastr.success(msg); - } else { - toastr.warning(msg); - } - }, async changeOwner(player) { const { dismiss, value } = await swal({ text: this.$t('admin.changePlayerOwner'), diff --git a/resources/assets/src/components/user/Closet.vue b/resources/assets/src/components/user/Closet.vue index d4d5be78..37b4209c 100644 --- a/resources/assets/src/components/user/Closet.vue +++ b/resources/assets/src/components/user/Closet.vue @@ -266,8 +266,7 @@ export default { this.loadCloset(page); }, avatarUrl(player) { - const tid = player.preference === 'default' ? player.tid_steve : player.tid_alex; - return `${blessing.base_url}/avatar/35/${tid}`; + return `${blessing.base_url}/avatar/35/${player.tid_skin}`; }, async selectTexture(tid) { const { type, hash } = await this.$http.get(`/skinlib/info/${tid}`); diff --git a/resources/assets/src/components/user/Players.vue b/resources/assets/src/components/user/Players.vue index 9a679aa9..d175307e 100644 --- a/resources/assets/src/components/user/Players.vue +++ b/resources/assets/src/components/user/Players.vue @@ -9,16 +9,6 @@ PID - - {{ $t('user.player.preference.title') }} - - - @@ -33,20 +23,12 @@ > {{ player.pid }} {{ player.player_name }} - - -
- -

- {{ $t('user.player.textures.steve') }} - + {{ $t('general.skin') }} + - +

- {{ $t('user.player.textures.alex') }} - - - - -

- -

- {{ $t('user.player.textures.cape') }} + {{ $t('general.cape') }} - +

@@ -220,11 +191,7 @@