частицы поломки предмета

Статус
В этой теме нельзя размещать новые ответы.
35
0
и снова доброго времени суток! сделал предмет он ломается каждые 3 тика (ну надо так)
и хотелось бы заменить эти обломки на... другую текстуру, а лучше вообще на дым. 
вот как видит это мракобесье из обломков игрок щас:
http://prntscr.com/bd08ng
http://prntscr.com/bd0a3k
в общем. как заменить текстуру обломков предмета или вообще убрать? как партиклы дыма и огня наспавнить я смогу. нужно только ткнуть носом где удалить обломки или сменить текстуру :)
 
35
0
вот код:
Код:
    public ItemStack onItemRightClick(ItemStack is, World world, EntityPlayer player){
        player.capabilities.isFlying = true;
        is.damageItem(1, player);
        return is;
    }
    
    public void onUpdate(ItemStack is, World world, Entity entity, int p_77663_4_, boolean p_77663_5_) {
        if(entity instanceof EntityPlayer) {
            EntityPlayer player = (EntityPlayer) entity;
            if(is.getItemDamage() == is.getMaxDamage()){
                player.setCurrentItemOrArmor(p_77663_4_, new ItemStack(ModItems.Flypack, 1));
            }
            if(is.isItemDamaged()){

                is.damageItem(1, player);
            }
            else {
                player.addPotionEffect(new PotionEffect(Potion.resistance.id, 20*5, 5));
                player.capabilities.isFlying = false;
                if(player.fallDistance == 0.0F){
                    player.removePotionEffect(11);
                }
            }
        }
 
28
0
Возьми код из смерти ентити. У них какой-то дым вроде при смерти.
 
35
0
спасибо, но мне нужно не просто добавить партиклы дыма, а убрать обломки предмета
Liahim
Возможно, стоит уничтожать предмет не дэмеджом, а просто обнулением слота в инвентаре?
Ну, а частицы добавить уже самому, и спаунить перед уничтожением...
попробую еще раз так сделать :)
 
1,137
5
3
5 минут поиска:
EntityLivingBase#renderBrokenItemStack
Код:
public void renderBrokenItemStack(ItemStack p_70669_1_)
    {
        this.playSound("random.break", 0.8F, 0.8F + this.worldObj.rand.nextFloat() * 0.4F);

        for (int i = 0; i < 5; ++i)
        {
            Vec3 vec3 = Vec3.createVectorHelper(((double)this.rand.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D);
            vec3.rotateAroundX(-this.rotationPitch * (float)Math.PI / 180.0F);
            vec3.rotateAroundY(-this.rotationYaw * (float)Math.PI / 180.0F);
            Vec3 vec31 = Vec3.createVectorHelper(((double)this.rand.nextFloat() - 0.5D) * 0.3D, (double)(-this.rand.nextFloat()) * 0.6D - 0.3D, 0.6D);
            vec31.rotateAroundX(-this.rotationPitch * (float)Math.PI / 180.0F);
            vec31.rotateAroundY(-this.rotationYaw * (float)Math.PI / 180.0F);
            vec31 = vec31.addVector(this.posX, this.posY + (double)this.getEyeHeight(), this.posZ);
            this.worldObj.spawnParticle("iconcrack_" + Item.getIdFromItem(p_70669_1_.getItem()), vec31.xCoord, vec31.yCoord, vec31.zCoord, vec3.xCoord, vec3.yCoord + 0.05D, vec3.zCoord);
        }
    }
Вставляй хук и чекай, что за стак. А ещё лучше эвент пихнуть
 

Icosider

Kotliner
Администратор
3,603
99
664
При разрушении спавним эффекты. Сам спавн эффектов можно взять из BlockFire. Завтра могу код скинуть.
 
35
0
Liahim написал(а):
Возможно, стоит уничтожать предмет не дэмеджом, а просто обнулением слота в инвентаре?
Ну, а частицы добавить уже самому, и спаунить перед уничтожением...
в общем да, так почти и сделал только эффект работает всегда пока игрок имеет дистанцию падения...я и забыл что ломание со звуком идет, включив колонки, понял, что звуки пулемета при полете не айс. Теперь предмет не ломается, а удаляется. Ну и эффект прилепил как надо.
Код:
  public void onUpdate(ItemStack is, World world, Entity entity, int p_77663_4_, boolean p_77663_5_) {
        if (!world.isRemote && entity instanceof EntityLivingBase) {
            if (((EntityLivingBase) entity).getEquipmentInSlot(0) != null &&
                ((EntityLivingBase) entity).getEquipmentInSlot(0).getItem() == this) {
                double radius = 0.37D;

                for (float l = 0F; l < 2 * Math.PI; l += Math.PI / 6) {
                    double px = entity.posX + radius * Math.cos(l);
                    double py = entity.posZ + radius * Math.sin(l);
                    Minecraft.getMinecraft().effectRenderer.addEffect(new EntitySmokeFX(
                            Minecraft.getMinecraft().theWorld, 
                            px, entity.posY + 1D, py, 0F, -0.5F, 0F));
                }
            }
        }
        if(entity instanceof EntityPlayer) {
            EntityPlayer player = (EntityPlayer) entity;
            if(is.getItemDamage() >= 15){
                is.stackSize = 0;
                player.setCurrentItemOrArmor(p_77663_4_, new ItemStack(ModItems.Flypack, 1));
                
            }
            if(is.isItemDamaged()){            
                is.damageItem(1, player);
           }
            else {
                player.addPotionEffect(new PotionEffect(Potion.resistance.id, 20*5, 5));
                player.capabilities.isFlying = false;
                if(player.fallDistance == 0.0F){
                    player.removePotionEffect(11);
                    Minecraft.getMinecraft().effectRenderer.clearEffects(world); 
                }
            }
        }

можно закрывать ,спасибо огромное за ответы :) зы можно еще сказать нормальный ли код вышел?))
 
28
0
nP9lHuk написал(а):
спасибо, но мне нужно не просто добавить партиклы дыма, а убрать обломки предмета
Liahim
Возможно, стоит уничтожать предмет не дэмеджом, а просто обнулением слота в инвентаре?
Ну, а частицы добавить уже самому, и спаунить перед уничтожением...
попробую еще раз так сделать :)
Ну, так поменяв код, уберётся эффект поломки.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху