AbstractClientPlayer, что это и как с ним работать ?

Версия Minecraft
1.7.10
43
0
Привет всем, на днях я познакомился с  AbstractClientPlayer  , но так и не понял что это ? знаю только что с его помощью можно менять игроку скин, а куда его писать и использовать я не знаю. Вот пример: я нажимаю ПКМ по предмету и меняется скин игрока, а если я ещё раз нажму ПКМ по предмету он вернётся на стандартный скин. Объясните пожалуйста схему работы этого метода
 

timaxa007

Модератор
5,831
409
672
AbstractClientPlayer - это абстрактный клиентский игрок, как-бы это объект сущности может быть создано в начале загрузки игры (до входа в мир [одиночной или сетевой игры]). Проверяешь на то что объект игрока является AbstractClientPlayer'ом, используешь метод func_152121_a(Type, ResourceLocation) от AbstractClientPlayer, в первый аргумент Type.SKIN, а второй текстуру для игрока. Восстановить текстуру можно, через SkinManager.
 
43
0
timaxa007 написал(а):
AbstractClientPlayer - это абстрактный клиентский игрок, как-бы это объект сущности может быть создано в начале загрузки игры (до входа в мир [одиночной или сетевой игры]). Проверяешь на то что объект игрока является AbstractClientPlayer'ом, используешь метод func_152121_a(Type, ResourceLocation) от AbstractClientPlayer, в первый аргумент Type.SKIN, а второй текстуру для игрока. Восстановить текстуру можно, через SkinManager.

Спасибо огромное, принцип работы понял, но у меня одна проблема это добавление к предмету, тоесть ПКМ и скин. Как это выглядит ;)
 

timaxa007

Модератор
5,831
409
672
Код:
	@Override
	public ItemStack onItemRightClick(ItemStack is, World world, EntityPlayer player) {
		if (player instanceof AbstractClientPlayer) {
			AbstractClientPlayer acp = (AbstractClientPlayer)player;
			ResourceLocation rl = new ResourceLocation(MODID, "textures/skin/my_skin.png");
			acp.func_152121_a(Type.SKIN, rl);
		}
		return super.onItemRightClick(is, world, player);
	}



Каждая текстура размером 64 на 32 (первая текстурка ванильная).
 
43
0
timaxa007 написал(а):
Код:
 @Override
 public ItemStack onItemRightClick(ItemStack is, World world, EntityPlayer player) {
 if (player instanceof AbstractClientPlayer) {
 AbstractClientPlayer acp = (AbstractClientPlayer)player;
 ResourceLocation rl = new ResourceLocation(MODID, "textures/skin/my_skin.png");
 acp.func_152121_a(Type.SKIN, rl);
 }
 return super.onItemRightClick(is, world, player);
 }



Каждая текстура размером 64 на 32 (первая текстурка ванильная).



Спасибо тебе огромное, ты самый нормальный кодер;) Теперь я наконец- то понял как менять этот гребенный скин с помощью предмета, самого утра думал :)


Timaxa007 у меня последние два вопроса что значит у тебя MODID в твоём коде, и как сделать чтоб ещё раз на ПКМ скин вернулся на стандартный. Надеюсь это последние вопросы в это теме :)


Почему при выходе из игры скин возвращается на стандартный ? можно это как ни будь исправить ?
 

Icosider

Kotliner
Администратор
3,603
99
664
Mathios написал(а):
timaxa007 написал(а):
Код:
 @Override
 public ItemStack onItemRightClick(ItemStack is, World world, EntityPlayer player) {
 if (player instanceof AbstractClientPlayer) {
 AbstractClientPlayer acp = (AbstractClientPlayer)player;
 ResourceLocation rl = new ResourceLocation(MODID, "textures/skin/my_skin.png");
 acp.func_152121_a(Type.SKIN, rl);
 }
 return super.onItemRightClick(is, world, player);
 }



Каждая текстура размером 64 на 32 (первая текстурка ванильная).



Спасибо тебе огромное, ты самый нормальный кодер;) Теперь я наконец- то понял как менять этот гребенный скин с помощью предмета, самого утра думал :)


Timaxa007 у меня последние два вопроса что значит у тебя MODID в твоём коде, и как сделать чтоб ещё раз на ПКМ скин вернулся на стандартный. Надеюсь это последние вопросы в это теме :)


Почему при выходе из игры скин возвращается на стандартный ? можно это как ни будь исправить ?




Если хочешь, чтобы скин оставался, присвой ему какое нибудь значение и сохраняй в игрока
 

timaxa007

Модератор
5,831
409
672
Если ты про мой код, то по-идеи только тот кто применил ("только хозяину скина"). Но я не проверял. В этом случаи будут нужны пакеты.


Да, текстура отображается тому, кто её применил.
 
7,099
324
1,510
AbstractClientPlayer#getPlayerInfo.playerTextures.put(Type.SKIN, resourceLocation)
 
Сверху