- 388
- 1
Здравствуйте.
Что нужно прописать в коде, чтобы мой энтити видели все игроки на сервере, а не только тот, кто его спаунит?
Что нужно прописать в коде, чтобы мой энтити видели все игроки на сервере, а не только тот, кто его спаунит?
Объясняю на примере.Dragon2488 написал(а):А с хренали твою энтити видно только тому кто спавнит?
Ну код яйца, стрелы и снежка я и так смотрел прежде чем тему запостить.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;
}
конкретно где и как проверять?Oldestkon написал(а):Проверяй серверСайд,
Всегда спавнили энтити на сервере...Dragon2488 написал(а):А пошевелить мозгами и убрать это не пробовал?
/** This is set to true for client worlds, and false for server worlds. */
public boolean isRemote;
Спавнить надо в обоих мирах, то есть серверном и клиентском.
Будет же два энтити лететь: один нормальный, другой - призрычный =)Dragon2488 написал(а):Я всегда спавнил без этой проверки и никогда её не юзал, и все работало.
Dragon2488 написал(а):Спавнить надо в обоих мирах
мужики, вы уж определитесьlaz2727 написал(а):Нет, не надо
это называется "метод тыка'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));
я пытаюсь узнать, как это делается.Dragon2488 написал(а):И ты еще пытаешься сделать чтоб её видели другие игроки?
Тогда как спаунить второй энтити?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;
}
}