Дальность рендера частиц.

Доброго всем времени суток. Вопрос таков: как можно увеличить максимальный радиус отрисовки частиц для игрока? Просто когда отходишь на 1 чанк от блока с частицами, то они не рисуются. И еще вопрос, как на 1.7.10 делать все таки свои частицы? Кто нибудь, сделайте пожалуйста подробный гайд, думаю всем будет полезно.
 
Чисто вкину своё мнение.
Если на все более-менее стоящие вещи будут клепать пошаговые гайды, то мододелы сделают себе же хуже.
Во-первых, понабежит куча ребяток копипастить всю систему и тащить все её баги.
Во-вторых, у неопытных будет вопросов в разы больше, чем обычно.
В итоге ни к чему хорошему это не приведет. Появится куча трешмодов, снизится общий уровень модов, снизится сложность разработки подобных систем, как результат - падение цен на фриланс-рынке, если можно так выразиться.
Есть вещи, которые должны делаться не по гайдам, а своим мозгом, но тут нужен опыт.

Гайды, как таковые, необходимы на начальном этапе знакомства с определенной технологий, они могут быть частью документации, но они не должны преследовать разработчиков на протяжении всей работы.
 
Oldestkon написал(а):
В итоге ни к чему хорошему это не приведет. Появится куча трешмодов, снизится общий уровень модов, снизится сложность разработки подобных систем, как результат - падение цен на фриланс-рынке, если можно так выразиться.
ого ты усложнил
 
А правильно все
 
http://www.minecraftforge.net/forum/index.php?topic=15550.0
Это универсальное решение.
Суть такова: ты рисуешь все нужные частицы через рендерер своего тайла. 
А у тайла можно задать кастомную дистанцию прорисовки, ведь все тайлы обрезаются фруструмом по отдельности, т.е. на каждый тайл идет отдельная проверка.
Частицы хранишь в самом TileEntity и потом разом рисуешь. Кстати, как результат получаешь небольшую оптимизацию, не
придется тратить по дравколлу на каждую частицу, если чуть-чуть переделать стандартный цикл рендера своей частицы.
Побочный эффект: траблы с синхронизацией частиц. Придется возиться с обменом данных сервер -> клиенты.

http://www.minecraftforge.net/forum/index.php?topic=26929.0
Здесь 1.8, поэтому на твоей версии может не сработать. При спавне партикла вторым параметром можно указать, игнорировать ли дальность спавна частицы.
 
Спасибо за гугл и развернутый ответ! Теперь бы только разобраться, как делать СВОИ частицы и все.
 
Я, просто сделал своё FX энтити, и там есть boolean метод рендера с аргументом дальности.
 
Может быть приведешь пример кода с пояснениями? А то все такие умные, что пздц.
[merge_posts_bbcode]Добавлено: 03.05.2015 22:55:54[/merge_posts_bbcode]

В классе тайлЭнтити кубача увидел это:
Код:
/**
     * Returns the square of the distance between this entity and the passed in coordinates.
     */
    public double getDistanceFrom(double p_145835_1_, double p_145835_3_, double p_145835_5_)
    {
        double d3 = (double)this.xCoord + 0.5D - p_145835_1_;
        double d4 = (double)this.yCoord + 0.5D - p_145835_3_;
        double d5 = (double)this.zCoord + 0.5D - p_145835_5_;
        return d3 * d3 + d4 * d4 + d5 * d5;
    }

    @SideOnly(Side.CLIENT)
    public double getMaxRenderDistanceSquared()
    {
        return 4096.0D;
    }
У себя в тайле сделал это:
Код:
public double getMaxRenderDistanceSquared()
   {
       return 8096.0D;
   }
Хинуя не работает. То есть дистанция не увеличивается.
 
aWGS22b.png

Значит у тебя что-то криво. Покажи, что делаешь хоть.
 
Делаю вот что:
Код:
package ru.common.tileentities;

import java.util.List;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.particle.EntityCritFX;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.DamageSource;
import net.minecraft.world.World;

public class TileEntityBlockParticles1 extends TileEntity {

   @Override
   public double getMaxRenderDistanceSquared()
   {
       return 16096.0D;
   }
   
   public void updateEntity()
   {
       super.updateEntity();
       World w = this.worldObj;

       double maxRadius = 3;
    if (w.isRemote)
       {
           AxisAlignedBB aabb = AxisAlignedBB.getBoundingBox(xCoord - 1, yCoord - 1.5, zCoord - 1, xCoord + 2, yCoord + 1.5, zCoord + 2);
           List<Entity> entities = w.getEntitiesWithinAABB(EntityPlayer.class, aabb);
           entities.addAll(w.getEntitiesWithinAABB(EntityCritFX.class, aabb));

           for (Entity entity : entities)
           {
               if (entity.getDistance(xCoord + 0.5, yCoord + (entity.posY - entity.boundingBox.minY), zCoord + 0.5) < maxRadius)
               {
                   int activeTimer = 50;
                   break;
               }
           }
       }
       else
       {
           for (int i = 0; i < w.playerEntities.size(); i++)
           {
               EntityPlayer p = (EntityPlayer) w.playerEntities.get(i);

               if (p.getDistance(this.xCoord + 0.5, this.yCoord, this.zCoord + 0.5) < maxRadius)
               {
                p.attackEntityFrom(DamageSource.inFire, 2);
                   p.setFire(8);
               }
           }
       }
   }
}
 
Код:
    @SideOnly(Side.CLIENT)
    public boolean isInRangeToRenderDist(double p_70112_1_)
    {
        return render;
    }
[merge_posts_bbcode]Добавлено: 03.05.2015 21:23:53[/merge_posts_bbcode]

Только там странный комментарий...
Код:
     * Checks if the entity is in range to render by using the past in distance and comparing it to its average edge
     * length * 64 * renderDistanceWeight Args: distance
Не совсем понял, то-есть, что-бы рендерилось на расстоянии 256 блоков, надо сделать так?
256
Код:
    @SideOnly(Side.CLIENT)
    public boolean isInRangeToRenderDist(double distance)
    {
        if(distance <= 256*64*[ещё что-то]){return render;}else{return false;}
    }

[merge_posts_bbcode]Добавлено: 03.05.2015 21:25:11[/merge_posts_bbcode]

Вот такой код откопал
Код:
    @SideOnly(Side.CLIENT)
    public boolean isInRangeToRenderDist(double p_70112_1_)
    {
        double d1 = this.boundingBox.getAverageEdgeLength();
        d1 *= 64.0D * this.renderDistanceWeight;
        return p_70112_1_ < d1 * d1;
    }
Кто нибудь объяснит мне, что это за вычисления такие?
[merge_posts_bbcode]Добавлено: 03.05.2015 21:27:49[/merge_posts_bbcode]

21:27 Обновил кода*

[merge_posts_bbcode]Добавлено: 03.05.2015 21:31:26[/merge_posts_bbcode]

Ну, судя по всему, this.renderDistanceWeight - та самая переменная?
 
да,во флане можно глянуть.Там такое было.(написал бы раньше,но был занят Игрой в Уничтожалку мозга AlienIsolation)
 
Из флана не понял что вытащить. Проблема не решена.
 
а ты как бы вытаскивать умеешь?)
 
ну да, я знаю, что во флане искать
[merge_posts_bbcode]Добавлено: 04.05.2015 19:35:31[/merge_posts_bbcode]

но мне надо, чтобы ты из другого мода мне тоже что-то вытянул)
 
"Россия - щедрая душа". Из какого еще мода что тебе надо?
 
Назад
Сверху