Minebot написал(а):Моба в ручную можно запихнуть в NBT предмета, и потом так же вручную из NBT заспавнить его, где надо. HP - EntityLivingBase#getHealth()
Zarak написал(а):Minebot написал(а):Моба в ручную можно запихнуть в NBT предмета, и потом так же вручную из NBT заспавнить его, где надо. HP - EntityLivingBase#getHealth()
Как его запихнуть?(Я учусь)
@Override
public ActionResult<ItemStack> onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) {
RayTraceResult ray = Minecraft.getMinecraft().objectMouseOver;
if (ray != null && ray.typeOfHit == RayTraceResult.Type.ENTITY && ray.entityHit instanceof EntityLivingBase){
ItemStack stack = playerIn.getHeldItem(handIn); // Получаем предмет
EntityLivingBase entity = (EntityLivingBase) ray.entityHit; // Получаем моба, на которого клинул игрок
NBTTagCompound tag = stack.getTagCompound(); // Получаем таг
// Записываем в таг харрактеристики моба... Опираясь на которые, мы его потом заспавним. Если хз как юзать NBT, то гугли и смотри гайды
}
return super.onItemRightClick(worldIn, playerIn, handIn);
}
Как именно тэг моба получить, ведь в нбт, я вижу только String, int ,float и ТД.Minebot написал(а):Zarak написал(а):Minebot написал(а):Моба в ручную можно запихнуть в NBT предмета, и потом так же вручную из NBT заспавнить его, где надо. HP - EntityLivingBase#getHealth()
Как его запихнуть?(Я учусь)
Код:@Override public ActionResult<ItemStack> onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) { RayTraceResult ray = Minecraft.getMinecraft().objectMouseOver; if (ray != null && ray.typeOfHit == RayTraceResult.Type.ENTITY && ray.entityHit instanceof EntityLivingBase){ ItemStack stack = playerIn.getHeldItem(handIn); // Получаем предмет EntityLivingBase entity = (EntityLivingBase) ray.entityHit; // Получаем моба, на которого клинул игрок NBTTagCompound tag = stack.getTagCompound(); // Получаем таг // Записываем в таг харрактеристики моба... Опираясь на которые, мы его потом заспавним. Если хз как юзать NBT, то гугли и смотри гайды } return super.onItemRightClick(worldIn, playerIn, handIn); }
Zarak написал(а):Как именно тэг моба получить, ведь в нбт, я вижу только String, int ,float и ТД.
Minebot написал(а):Код:package zarak.DarkKnowladge.common.items.item; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.UUID; import org.lwjgl.opengl.GL11; import cofh.redstoneflux.api.IEnergyContainerItem; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityList.EntityEggInfo; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.ITickable; import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; import net.minecraft.world.gen.structure.template.Template.EntityInfo; import net.minecraftforge.event.entity.player.PlayerInteractEvent.RightClickItem; import zarak.DarkKnowladge.Main; import zarak.DarkKnowladge.Materials; import zarak.DarkKnowladge.Tabs; import zarak.DarkKnowladge.common.hungler.EnumHundler.CopyPasterType; import zarak.DarkKnowladge.common.mobs.EntityDiePig; import zarak.DarkKnowladge.init.ModItem; public class ItemCopyPaster extends Item { private String name = "copy_paster"; private EntityLivingBase entity; public ItemCopyPaster() { setUnlocalizedName(name); setHasSubtypes(true); setRegistryName(name); setCreativeTab(Tabs.DK_TAB); this.setMaxStackSize(1); } @Override public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items) { for (int i = 0; i < CopyPasterType.values().length; i++) { items.add(new ItemStack(this, 1, i)); } } @Override public void addInformation(ItemStack stack, World wolrdIn, List<String> list, ITooltipFlag flag) { if (stack.hasTagCompound()) { String name = "Empty"; list.add(TextFormatting.AQUA + name.toUpperCase()); } super.addInformation(stack, wolrdIn, list, flag); } @Override public ActionResult<ItemStack> onItemRightClick(World wolrdIn, EntityPlayer player, EnumHand hand) { RayTraceResult ray = Minecraft.getMinecraft().objectMouseOver; ItemStack stack = player.getHeldItem(hand); if (stack.getMetadata() == 0) { if (ray != null && ray.typeOfHit == ray.typeOfHit.ENTITY && ray.entityHit instanceof EntityLivingBase) { EntityLivingBase entity = (EntityLivingBase) ray.entityHit; NBTTagCompound tag = new NBTTagCompound(); tag.setUniqueId("type", entity.getUniqueID()); tag.setFloat("HP", entity.getHealth()); stack.setTagCompound(tag); entity.setDropItemsWhenDead(false); entity.setDead(); this.entity = entity; stack.setItemDamage(1); } if (stack.getMetadata() == 1) { if (!stack.hasTagCompound()) return super.onItemRightClick(wolrdIn, player, hand); NBTTagCompound tag = stack.getTagCompound(); wolrdIn.spawnEntity(entity); stack.setItemDamage(0); } } return super.onItemRightClick(wolrdIn, player, hand); } } Вот такую хр*нь сделал, не работает.
Zarak написал(а):Как именно тэг моба получить, ведь в нбт, я вижу только String, int ,float и ТД.
serializeNBT и deserializeNBT
Minebot написал(а):Во-первых, что за смачный return в начале условия? Во-вторых, ты при спавне не считываешь данные с NBT, которые ты записал
wolrdIn.spawnEntity(entity);
CoomingSoon написал(а):Лучше задайся вопросом: а как иначе записать? Зачем методу, который спавнит сущность, делать что-то с ее данными? По моей логике(а может и не только моей), стоит посмотреть entity. Наверняка там есть что-то типа getData и пр.
Minebot написал(а):Zarak написал(а):Как именно тэг моба получить, ведь в нбт, я вижу только String, int ,float и ТД.
serializeNBT и deserializeNBT
как изменить хп?Minebot написал(а):Minebot написал(а):Zarak написал(а):Как именно тэг моба получить, ведь в нбт, я вижу только String, int ,float и ТД.
serializeNBT и deserializeNBT
Ээй, посмотрите выше. Это и есть тот "getData и setData"
Zarak написал(а):как изменить хп?
Minebot написал(а):Zarak написал(а):как изменить хп?
Просто меняешь переменную entity.health = 20;
Zarak написал(а):entity.setHealth(20);
или
entity.getEntityData().setInteger("entity.health", 20);
Agravaine написал(а):Шо вы на клиенте городите? Сервер вас нафиг пошлет.
Agravaine написал(а):Шо вы на клиенте городите? Сервер вас нафиг пошлет.
Zarak написал(а):Agravaine написал(а):Шо вы на клиенте городите? Сервер вас нафиг пошлет.
а великий мастер-моддер, как мне реализовать копирования и вставку моба?
@Override
public ActionResult<ItemStack> onItemRightClick(World wolrdIn, EntityPlayer player, EnumHand hand) {
RayTraceResult ray = Minecraft.getMinecraft().objectMouseOver;
ItemStack stack = player.getHeldItem(hand);
if (stack.getMetadata() == 0) {
if (ray != null && ray.typeOfHit == RayTraceResult.Type.ENTITY
&& ray.entityHit instanceof EntityLivingBase) {
EntityLivingBase entity = (EntityLivingBase) ray.entityHit;
NBTTagCompound tag = new NBTTagCompound();
tag.setFloat("HP", entity.getHealth());
stack.setTagCompound(tag);
this.entity = entity;
entity.setDropItemsWhenDead(false);
entity.setDead();
stack.setItemDamage(1);
}
} else {
if (stack.hasTagCompound()) {
NBTTagCompound tag = stack.getTagCompound();
Float HP = tag.getFloat("HP");
entity.setHealth(HP);
entity.getEntityData().setInteger("entity.health", 20);
wolrdIn.spawnEntity(entity);
stack.setItemDamage(0);
}
}
return super.onItemRightClick(wolrdIn, player, hand);
}
Tried to add entity minecraft:creeper but it was marked as removed already
Agravaine написал(а):Так ты клиентские классы трогаешь.