Jump to content

[1.10]How to spawn the particles for other players?


WildHeart

Recommended Posts

Hello, I need to spawn the particles from the player, but to see other players and they could spawn the particles. I used to do this: Press "Q" -> sendToAllAround but in this method there is a problem, the players even though I see the particles but when they spanat, they have crashes error to the console(debug). There was another way to do so sendToServer and server side to send the package sendToAllAround, but I simply do not reach the packages.

[spoiler=Events]

@SubscribeEvent
public void onClientTicks(final TickEvent.ClientTickEvent e)
{
if(e.phase == TickEvent.Phase.START)//For example
   {
    NetworkHandler.sendToServer(new PacketParticles());
   }
}

 

 

[spoiler=NetworkHandler]

public class NetworkHandler
{
   public static final SimpleNetworkWrapper NETWORK = NetworkRegistry.INSTANCE.newSimpleChannel("ModChannel");
   private static int dec;

   public static void init()
   {
       NETWORK.registerMessage(PacketParticles.class, PacketParticles.class, dec++, Side.SERVER);
NETWORK.registerMessage(PacketFire.class, PacketFire.class, dec++, Side.CLIENT);
   }

   public static void sendToAll(final IMessage message) {
       NETWORK.sendToAll(message);
   }
   public static void sendTo(final IMessage message, final EntityPlayerMP player) {
       NETWORK.sendTo(message, player);
   }
   public static void sendToAllAround(final LocationDoublePacket message, final World world) {
       sendToAllAround(message, message.getTargetPoint(world));
   }
   public static void sendToAllAround(final IMessage message, final NetworkRegistry.TargetPoint point) {
       NETWORK.sendToAllAround(message, point);
   }
   public static void sendToDimension(final IMessage message, final int dimensionId) {
       NETWORK.sendToDimension(message, dimensionId);
   }
   public static void sendToServer(final IMessage message){
       NETWORK.sendToServer(message);
   }
}

 

 

[spoiler=LocationDoublePacket]

public abstract  class LocationDoublePacket<REQ extends IMessage> extends AbstractPacket<REQ>
{
   protected double x, y, z;
   public LocationDoublePacket(){}
   public LocationDoublePacket(final double x, final double y, final double z)
   {
       this.x = x;
       this.y = y;
       this.z = z;
   }

   @Override
   public void toBytes(final ByteBuf buf)
   {
       buf.writeDouble(x);
       buf.writeDouble(y);
       buf.writeDouble(z);
   }

   @Override
   public void fromBytes(final ByteBuf buf)
   {
       x = buf.readDouble();
       y = buf.readDouble();
       z = buf.readDouble();
   }

   public NetworkRegistry.TargetPoint getTargetPoint(final World world){
       return getTargetPoint(world, 64);
   }
   public NetworkRegistry.TargetPoint getTargetPoint(final World world, double updateDistance) {
       return new NetworkRegistry.TargetPoint(world.provider.getDimension(), x, y, z, updateDistance);
   }
}

 

 

[spoiler=AbstractPacket]

public abstract class AbstractPacket<REQ extends IMessage> implements IMessage, IMessageHandler<REQ, REQ>
{
   @Override
   public REQ onMessage(final REQ message, final MessageContext ctx)
   {
       if(ctx.side == Side.SERVER)
       {
           handleServerSide(message, ctx.getServerHandler().playerEntity);
       }
       else
       {
           handleClientSide(message, FMLClientHandler.instance().getClientPlayerEntity());
       }
       return null;
   }

   public abstract void handleClientSide(final REQ message, final EntityPlayer player);
   public abstract void handleServerSide(final REQ message, final EntityPlayer player);
}

 

 

[spoiler=PacketParticles]

public class PacketParticles extends LocationDoublePacket<PacketParticles>
{
   public PacketParticles()
   {
   }

   @Override
   public void toBytes(final ByteBuf buffer)
   {
   }

   @Override
   public void fromBytes(final ByteBuf buffer)
   {
   }

   @Override
   public void handleClientSide(final PacketParticles message, final EntityPlayer player)
   {
   }

   @Override
   public void handleServerSide(final PacketParticles message, final EntityPlayer player) {
       NetworkHandler.sendToAllAround(new PacketFire(), player.worldObj);
   }
}

 

 

[spoiler=PacketFire]

public class PacketFire extends LocationDoublePacket<PacketFire>
{
   public PacketFire()
   {
   }

   @Override
   public void toBytes(final ByteBuf buffer)
   {
   }

   @Override
   public void fromBytes(final ByteBuf buffer)
   {
   }

   @Override
   public void handleClientSide(final PacketFire message, final EntityPlayer player)
   {
       Vec3d vec = player.getLookVec();
       double x = vec.xCoord / 10, y = vec.yCoord / 10, z = vec.zCoord / 10;
       Random random = new Random();

       for (int i = 0; i < 100; i++)
       {
           final double xCoord = player.posX + x * i + random.nextDouble();
           final double yCoord = player.posY + y * i + random.nextDouble();
           final double zCoord = player.posZ + z * i + random.nextDouble();
           player.worldObj.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, xCoord, yCoord, zCoord, x * 5, y * 5, z * 5);
       }
   }

   @Override
   public void handleServerSide(final PacketFire message, final EntityPlayer player) {

   }
}

 

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.