Нужно записать куда-то моба.

Версия Minecraft
1.12+
586
32
136
Допустим, я хочу создать предмет, который при ПКМ по мобе сохраняет его , и при ПКМ по алмазной руде спавнит его.Также волнует, как получить ХП, моба.
 

Icosider

Kotliner
Администратор
3,603
99
664
Начнём с того, что можно ещё проще сейвить моба, т.е. брать его имя и затем по имени спавнить, как это в яйцах сделано. По поводу всех твоих операция с ПКМ по мобу, добавь в самом начале условие if (!world.isRemote) так ты сможешь проверить, то что у тебя данный код будет выполнен не на клиенте. По поводу НБТ, смотри гайды, на самом деле всё просто, NBTCompund tag = new NBTTagCompound(); при записи(сохранении) делаешь set("НазваниеПеременной", Данные), при чтении(загрузке) создаёшь переменную в которую делаешь get(). Если до сих пор не понятно, по гугли на тему NBT. Всё вопросы сразу отпадут.
 
586
32
136
Ivasik написал(а):
Начнём с того, что можно ещё проще сейвить моба, т.е. брать его имя и затем по имени спавнить, как это в яйцах сделано. По поводу всех твоих операция с ПКМ по мобу, добавь в самом начале условие if (!world.isRemote) так ты сможешь проверить, то что у тебя данный код будет выполнен не на клиенте. По поводу НБТ, смотри гайды, на самом деле всё просто, NBTCompund tag = new NBTTagCompound(); при записи(сохранении) делаешь set("НазваниеПеременной", Данные), при чтении(загрузке) создаёшь переменную в которую делаешь get(). Если до сих пор не понятно, по гугли на тему NBT. Всё вопросы сразу отпадут.
Про нбт уже понял, как именно можно брать и спавнить моба по имени?
 
586
32
136
Zarak написал(а):
Ivasik написал(а):
Начнём с того, что можно ещё проще сейвить моба, т.е. брать его имя и затем по имени спавнить, как это в яйцах сделано. По поводу всех твоих операция с ПКМ по мобу, добавь в самом начале условие if (!world.isRemote) так ты сможешь проверить, то что у тебя данный код будет выполнен не на клиенте. По поводу НБТ, смотри гайды, на самом деле всё просто, NBTCompund tag = new NBTTagCompound(); при записи(сохранении) делаешь set("НазваниеПеременной", Данные), при чтении(загрузке) создаёшь переменную в которую делаешь get(). Если до сих пор не понятно, по гугли на тему NBT. Всё вопросы сразу отпадут.
Про нбт уже понял, как именно можно брать и спавнить моба по имени?
Так и не понял, как брать а потом спавнить моба по имени?
 

Icosider

Kotliner
Администратор
3,603
99
664
Zarak написал(а):
Zarak написал(а):
Ivasik написал(а):
Начнём с того, что можно ещё проще сейвить моба, т.е. брать его имя и затем по имени спавнить, как это в яйцах сделано. По поводу всех твоих операция с ПКМ по мобу, добавь в самом начале условие if (!world.isRemote) так ты сможешь проверить, то что у тебя данный код будет выполнен не на клиенте. По поводу НБТ, смотри гайды, на самом деле всё просто, NBTCompund tag = new NBTTagCompound(); при записи(сохранении) делаешь set("НазваниеПеременной", Данные), при чтении(загрузке) создаёшь переменную в которую делаешь get(). Если до сих пор не понятно, по гугли на тему NBT. Всё вопросы сразу отпадут.
Про нбт уже понял, как именно можно брать и спавнить моба по имени?
Так и не понял, как брать а потом спавнить моба по имени?
world.spawnEntity(что то подобное)
 
7,099
324
1,510
Zarak написал(а):
Допустим, я хочу создать предмет, который при ПКМ по мобе сохраняет его , и при ПКМ по алмазной руде спавнит его.Также волнует, как получить ХП, моба.
Флакон души из enderio
 
586
32
136
hohserg написал(а):
Zarak написал(а):
Допустим, я хочу создать предмет, который при ПКМ по мобе сохраняет его , и при ПКМ по алмазной руде спавнит его.Также волнует, как получить ХП, моба.
Флакон души из enderio

Толи я тупой, но там половина функций не работают.
 
3,005
192
592
Эх, сейчас бы копировать флакон, если его нету на 1.12.. Там 1.11.2 еще не доделано.
 
586
32
136
Код:
@Override
 public ActionResult<ItemStack> onItemRightClick(World world, EntityPlayer player, EnumHand hand) {
 RayTraceResult ray = Minecraft.getMinecraft().objectMouseOver;
 ItemStack item = player.getHeldItem(hand);
 if (item.getMetadata() == 0) {
 if (ray != null && ray.typeOfHit == RayTraceResult.Type.ENTITY
 && ray.entityHit instanceof EntityLivingBase) {
 if (!world.isRemote) {
 EntityLivingBase entity = (EntityLivingBase) ray.entityHit;
 if (!(entity instanceof EntityPlayer)) {
 int id = EntityList.getID(entity.getClass());
 NBTTagCompound tag = new NBTTagCompound();
 tag.setInteger("id", id);
 item.setTagCompound(tag);
 entity.setDead();
 item.setItemDamage(1);
 }
 }
 }
 } else {
 NBTTagCompound tag = item.getTagCompound();
 int ID = tag.getInteger("id");
 Entity mob = EntityList.newEntity(EntityList.getClassFromID(ID), player.getEntityWorld());
 player.getEntityWorld().spawnEntity(mob);
 player.sendMessage(new TextComponentString("" + mob));
 player.sendMessage(new TextComponentString("" + ID));
 player.sendMessage(new TextComponentString("" + EntityList.getClassFromID(ID)));

 }
 return super.onItemRightClick(world, player, hand);
 }
[font=Monaco, Consolas, Courier, monospace]не работает, хотя в дебаге, есть и Class, и ID и Mob, всё есть для спавна, но тупо не спавнит![/font]
 
1,015
9
102
У тебя точно код доходит до спавна? Эксепшенов нет? Класс Minecraft будет крашить сервер, если его запустить отдельно от клиента, поэтому тебе придется делать пакеты. Надо с клиента передавать ID моба, на которого ты смотришь на сервер и там уже его спавнить/сохранять в предмет. Про пакеты можешь глянуть в учебнике
 
586
32
136
Minebot написал(а):
У тебя точно код доходит до спавна? Эксепшенов нет? Класс Minecraft будет крашить сервер, если его запустить отдельно от клиента, поэтому тебе придется делать пакеты. Надо с клиента передавать ID моба, на которого ты смотришь на сервер и там уже его спавнить/сохранять в предмет. Про пакеты можешь глянуть в учебнике

Да, доходит, не крашит(потому-что не спавнит),прочитаю, про пакеты, отпишусь


Minebot написал(а):
У тебя точно код доходит до спавна? Эксепшенов нет? Класс Minecraft будет крашить сервер, если его запустить отдельно от клиента, поэтому тебе придется делать пакеты. Надо с клиента передавать ID моба, на которого ты смотришь на сервер и там уже его спавнить/сохранять в предмет. Про пакеты можешь глянуть в учебнике

Ладно, я слишком тупой, про пакеты прочитал, как партиклы спавнить, более менее понял, но как отослать ID на сервер, и там уже спавнить, нифига не понял.
 
7,099
324
1,510
Minebot написал(а):
Надо с клиента передавать ID моба, на которого ты смотришь на сервер и там уже его спавнить/сохранять в предмет
Можно будет так читерить, получать мобов, которых не было в мире
 
Сверху