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

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

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

http://www.minecraftforge.net/forum/index.php?topic=26929.0
Здесь 1.8, поэтому на твоей версии может не сработать. При спавне партикла вторым параметром можно указать, игнорировать ли дальность спавна частицы.
 
Спасибо за гугл и развернутый ответ! Теперь бы только разобраться, как делать СВОИ частицы и все.
 

svk

1,185
2
Я, просто сделал своё 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;
   }
Хинуя не работает. То есть дистанция не увеличивается.
 
1,990
18
105
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);
               }
           }
       }
   }
}
 

svk

1,185
2
Код:
    @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 - та самая переменная?
 
1,683
1
да,во флане можно глянуть.Там такое было.(написал бы раньше,но был занят Игрой в Уничтожалку мозга AlienIsolation)
 
Из флана не понял что вытащить. Проблема не решена.
 
7,099
324
1,510
а ты как бы вытаскивать умеешь?)
 
7,099
324
1,510
ну да, я знаю, что во флане искать
[merge_posts_bbcode]Добавлено: 04.05.2015 19:35:31[/merge_posts_bbcode]

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