[1.6.4] Мой энтити не видно другим игрокам на сервере

Здравствуйте.
Что нужно прописать в коде, чтобы мой энтити видели все игроки на сервере, а не только тот, кто его спаунит?
 
329
13
Dragon2488 написал(а):
А с хренали твою энтити видно только тому кто спавнит?
Объясняю на примере.
На сервере два игрока. Первый спаунит кастомный энтити, а второй смотрит и нихрена не видит.
 
1,990
18
105
Ну на клиенте спавнит он значит. Проверяй серверСайд, смотри код яиц. Никаких там пакетов самому отсылать не надо, хрень несут.
 
Oldestkon написал(а):
Ну на клиенте спавнит он значит. Проверяй серверСайд, смотри код яиц
Ну код яйца, стрелы и снежка я и так смотрел прежде чем тему запостить.
Там везде примерно это:
Код:
    public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
    {
        if (!par3EntityPlayer.capabilities.isCreativeMode)
        {
            --par1ItemStack.stackSize;
        }

        par2World.playSoundAtEntity(par3EntityPlayer, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F));

        if (!par2World.isRemote)
        {
            par2World.spawnEntityInWorld(new EntityEgg(par2World, par3EntityPlayer));
        }

        return par1ItemStack;
    }
а у меня вот:
Код:
    public ItemStack onItemRightClick(ItemStack par1ItemStack, World world, EntityPlayer player){    
     if (!world.isRemote){
   world.spawnEntityInWorld(new EntityEffect1(world,player));
     } 
        return par1ItemStack;
    }
Фактически, то же самое. Если убираю !, то есть делаю isRemote==true (как в яйце), то клиент крашится (или сервер - если я на сервере).
Oldestkon написал(а):
Проверяй серверСайд,
конкретно где и как проверять?
 
2,955
12
А пошевелить мозгами и убрать это не пробовал?

/** This is set to true for client worlds, and false for server worlds. */
   public boolean isRemote;

Спавнить надо в обоих мирах, то есть серверном и клиентском.
 
771
5
Dragon2488 написал(а):
А пошевелить мозгами и убрать это не пробовал?

/** This is set to true for client worlds, and false for server worlds. */
   public boolean isRemote;

Спавнить надо в обоих мирах, то есть серверном и клиентском.
Всегда спавнили энтити на сервере...
 
905
5
Нет, не надо. А пакеты вообще нужны, только если что-то совсем новое делаешь.
[merge_posts_bbcode]Ибо нефиг[/merge_posts_bbcode]

Возможно, у тебя в коде самой энтити что-то неправильно, запсти.
 
2,955
12
Я всегда спавнил без этой проверки и никогда её не юзал, и все работало.
 
771
5
Dragon2488 написал(а):
Я всегда спавнил без этой проверки и никогда её не юзал, и все работало.
Будет же два энтити лететь: один нормальный, другой - призрычный =)
 
Dragon2488 написал(а):
Покажи код энтити и её рендер, тогда уж точно скажем.
пошевелил мозгами, убрал проверку - сервер крашится.
Вот энтити:
Код:
package mods.mod_fireworks;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.Minecraft;
import net.minecraft.client.particle.EntityFX;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.monster.EntityBlaze;
import net.minecraft.entity.projectile.EntityThrowable;
import net.minecraft.util.DamageSource;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;

public class EntityEffect1 extends EntityThrowable
{
    int Max = 20; 

    @SideOnly(Side.CLIENT)
    public EntityEffect1(World par1World)
    {
        super(par1World);
    }

    @SideOnly(Side.CLIENT)
    public EntityEffect1(World par1World, EntityLivingBase par2EntityLivingBase)
    {
        super(par1World, par2EntityLivingBase);
    }

    @SideOnly(Side.CLIENT)
    public EntityEffect1(World par1World, double par2, double par4, double par6)
    {
        super(par1World, par2, par4, par6);
   }

    /**
     * Called when this EntityThrowable hits a block or entity.
     */@Override
    protected void onImpact(MovingObjectPosition par1MovingObjectPosition)
    {
            this.setDead();
            for (int i=0; i<70; i++){
        float mX = rand.nextFloat();
        float mY = rand.nextFloat();
        float mZ = rand.nextFloat();
        float red = rand.nextFloat();
        float green = rand.nextFloat();
        float blue = rand.nextFloat();
        float scale = rand.nextFloat();
        int maxAge = 40;
        EntitySpark spark = new EntitySpark(this.worldObj,this.posX,this.posY,this.posZ,
                mX,mY,mZ,Minecraft.getMinecraft().effectRenderer);
        spark.setRBGColorF(red, green, blue);
        Minecraft.getMinecraft().effectRenderer.addEffect((EntityFX)spark);
        System.out.println("firework1 impacts");
            }
        
    }
     
    @Override
    public void onUpdate()
    {
         super.onUpdate();

        if (this.ticksExisted>this.Max){
            System.out.println("firework1 out of ticks");
//            this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 6.0f,true);
            this.setDead();
            if (this.worldObj.isRemote){
                for (int i=0; i<70; i++){
            float mX = rand.nextFloat();
            float mY = rand.nextFloat();
            float mZ = rand.nextFloat();
            float red = rand.nextFloat();
            float green = rand.nextFloat();
            float blue = rand.nextFloat();
            float scale = rand.nextFloat();
            int maxAge = 40;
            EntitySpark spark = new EntitySpark(this.worldObj,this.posX,this.posY,this.posZ,
                    mX,mY,mZ,Minecraft.getMinecraft().effectRenderer);
            spark.setRBGColorF(red, green, blue);
            Minecraft.getMinecraft().effectRenderer.addEffect((EntityFX)spark);
            mX = -rand.nextFloat();
            mY = -rand.nextFloat();
            mZ = -rand.nextFloat();
            spark = new EntitySpark(this.worldObj,this.posX,this.posY,this.posZ,
                    mX,mY,mZ,Minecraft.getMinecraft().effectRenderer);
            spark.setRBGColorF(red, green, blue);
            Minecraft.getMinecraft().effectRenderer.addEffect((EntityFX)spark);
                }
            }
            }
            return;
        }
    }
рендера нет, я просто делаю вот так:
Код:
        RenderingRegistry.registerEntityRenderingHandler(EntityEffect1.class,
                new RenderEntityFireworkItem(mod_Fireworks.itemFirework1));
 
2,955
12
@SideOnly(Side.CLIENT)
    public EntityEffect1(World par1World)
    {
        super(par1World);
    }

    @SideOnly(Side.CLIENT)
    public EntityEffect1(World par1World, EntityLivingBase par2EntityLivingBase)
    {
        super(par1World, par2EntityLivingBase);
    }

    @SideOnly(Side.CLIENT)
    public EntityEffect1(World par1World, double par2, double par4, double par6)
    {
        super(par1World, par2, par4, par6);
   }
И ты еще пытаешься сделать чтоб её видели другие игроки?
 
771
5
Убери везде SideOnly и Minecraft.getMinecraft().effectRenderer.addEffect((EntityFX)spark);
 
Majestic написал(а):
Убери везде SideOnly и Minecraft.getMinecraft().effectRenderer.addEffect((EntityFX)spark);
Тогда как спаунить второй энтити?
Код:
package mods.mod_fireworks;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.particle.EffectRenderer;
import net.minecraft.client.particle.EntityFX;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;

@SideOnly(Side.CLIENT)
public class EntitySpark extends EntityFX
{
    private int baseTextureIndex = 160;
    private boolean field_92054_ax;
    private boolean field_92048_ay;
    private final EffectRenderer field_92047_az;
    private float fadeColourRed;
    private float fadeColourGreen;
    private float fadeColourBlue;
    private boolean hasFadeColour;

    public EntitySpark(World par1World, double par2, double par4, double par6, double par8, double par10, double par12, EffectRenderer par14EffectRenderer)
    {
        super(par1World, par2, par4, par6);
        this.motionX = par8;
        this.motionY = par10;
        this.motionZ = par12;
        this.field_92047_az = par14EffectRenderer;
        this.particleScale *= 0.75F;
        this.particleMaxAge = 48 + this.rand.nextInt(12);
        this.noClip = false;
        this.particleRed = 0.0f;
        this.particleGreen = 1.0f;
        this.particleBlue = 0.0f;
        this.setRBGColorF(this.particleRed,this.particleGreen,this.particleBlue);
    }

    public void setTrail(boolean par1)
    {
        this.field_92054_ax = par1;
    }

    public void setTwinkle(boolean par1)
    {
        this.field_92048_ay = par1;
    }

    public void setColour(int par1)
    {
        float f = (float)((par1 & 16711680) >> 16) / 255.0F;
        float f1 = (float)((par1 & 65280) >> 8) / 255.0F;
        float f2 = (float)((par1 & 255) >> 0) / 255.0F;
        float f3 = 1.0F;
        this.setRBGColorF(f * f3, f1 * f3, f2 * f3);
    }

    public void setFadeColour(int par1)
    {
        this.fadeColourRed = (float)((par1 & 16711680) >> 16) / 255.0F;
        this.fadeColourGreen = (float)((par1 & 65280) >> 8) / 255.0F;
        this.fadeColourBlue = (float)((par1 & 255) >> 0) / 255.0F;
        this.hasFadeColour = true;
    }

    /**
     * returns the bounding box for this entity
     */
    public AxisAlignedBB getBoundingBox()
    {
        return null;
    }

    /**
     * Returns true if this entity should push and be pushed by other entities when colliding.
     */
    public boolean canBePushed()
    {
        return false;
    }

    public void renderParticle(Tessellator par1Tessellator, float par2, float par3, float par4, float par5, float par6, float par7)
    {
        if (!this.field_92048_ay || this.particleAge < this.particleMaxAge / 3 || (this.particleAge + this.particleMaxAge) / 3 % 2 == 0)
        {
            super.renderParticle(par1Tessellator, par2, par3, par4, par5, par6, par7);
        }
    }

    /**
     * Called to update the entity's position/logic.
     */
    public void onUpdate()
    {
        this.prevPosX = this.posX;
        this.prevPosY = this.posY;
        this.prevPosZ = this.posZ;

        if (this.particleAge++ >= this.particleMaxAge)
        {
            this.setDead();
        }

        if (this.particleAge > this.particleMaxAge / 2)
        {
            this.setAlphaF(1.0F - ((float)this.particleAge - (float)(this.particleMaxAge / 2)) / (float)this.particleMaxAge);

            if (this.hasFadeColour)
            {
                this.particleRed += (this.fadeColourRed - this.particleRed) * 0.2F;
                this.particleGreen += (this.fadeColourGreen - this.particleGreen) * 0.2F;
                this.particleBlue += (this.fadeColourBlue - this.particleBlue) * 0.2F;
            }
        }

        this.setParticleTextureIndex(this.baseTextureIndex + (7 - this.particleAge * 8 / this.particleMaxAge));
        this.motionY -= 0.004D;
        this.moveEntity(this.motionX, this.motionY, this.motionZ);
        this.motionX *= 0.9100000262260437D;
        this.motionY *= 0.9100000262260437D;
        this.motionZ *= 0.9100000262260437D;

        if (this.onGround)
        {
            this.motionX *= 0.699999988079071D;
            this.motionZ *= 0.699999988079071D;
        }

        if (this.field_92054_ax && this.particleAge < this.particleMaxAge / 2 && (this.particleAge + this.particleMaxAge) % 2 == 0)
        {
            EntitySpark entityfireworksparkfx = new EntitySpark(this.worldObj, this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D, this.field_92047_az);
            entityfireworksparkfx.setRBGColorF(this.particleRed, this.particleGreen, this.particleBlue);
            entityfireworksparkfx.particleAge = entityfireworksparkfx.particleMaxAge / 2;

            if (this.hasFadeColour)
            {
                entityfireworksparkfx.hasFadeColour = true;
                entityfireworksparkfx.fadeColourRed = this.fadeColourRed;
                entityfireworksparkfx.fadeColourGreen = this.fadeColourGreen;
                entityfireworksparkfx.fadeColourBlue = this.fadeColourBlue;
            }

            entityfireworksparkfx.field_92048_ay = this.field_92048_ay;
            this.field_92047_az.addEffect(entityfireworksparkfx);
        }
    }

    public int getBrightnessForRender(float par1)
    {
        return 15728880;
    }

    /**
     * Gets how bright this entity is.
     */
    public float getBrightness(float par1)
    {
        return 1.0F;
    }
}
Ему нужен EffectRenderer. Где его взять?
 
Сверху