Jump to content

How to send packets back to the client after sending a packet to the server?


bossmania

Recommended Posts

Hi, so I was making an item that sends info to the server to do some work, and I want the server to send the client back the results? How do I do that? Here is my code:

 

The snippet that sends the packet to the server

SimpleChannelNetwork.CHANNEL.sendToServer(new CreateStructureCompass("fortress"));

 

The file that manage the traffic

package io.github.bossmania.NetherandEndMaps.core.network;

import io.github.bossmania.NetherandEndMaps.NetherandEndMaps;
import io.github.bossmania.NetherandEndMaps.core.network.message.CreateStructureCompass;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.network.NetworkRegistry;
import net.minecraftforge.fml.network.simple.SimpleChannel;

public class SimpleChannelNetwork {
	public static final String NETWORK_VERSION = "0.1.0";
	
	public static final SimpleChannel CHANNEL = NetworkRegistry.newSimpleChannel(
			new ResourceLocation(NetherandEndMaps.MOD_ID, "network"), 
			() -> NETWORK_VERSION,
			version -> version.equals(NETWORK_VERSION), 
			version -> version.equals(NETWORK_VERSION));
	
	public static void init() {
		CHANNEL.registerMessage(0, CreateStructureCompass.class ,CreateStructureCompass::encode, CreateStructureCompass::decode, CreateStructureCompass::handle);
	}
}

 

the code that handle the packet receive and where I want the server to send back a packet to the client

package io.github.bossmania.NetherandEndMaps.core.network.message;

import java.util.function.Supplier;

import io.github.bossmania.NetherandEndMaps.common.items.TemporaryItem;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.gen.feature.structure.Structure;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.fml.network.NetworkEvent;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;

public class CreateStructureCompass {
	public String structureType;
	
	public CreateStructureCompass() {
		
	}
	//create the constructor and store the structureType
	public CreateStructureCompass(String structureType) {
		this.structureType = structureType;
	}
	
	//encode the message
	public static void encode(CreateStructureCompass message, PacketBuffer buffer) {
		buffer.writeString(message.structureType);
	}
	
	//decode the message
	public static CreateStructureCompass decode(PacketBuffer buffer) {
		return new CreateStructureCompass(buffer.readString());
	}
	
	//execute function when message is sent to server
	public static void handle(CreateStructureCompass message, Supplier<NetworkEvent.Context> contextSupplier) {
		NetworkEvent.Context context = contextSupplier.get();
		context.enqueueWork(() -> {
			//get the player and the server
			ServerPlayerEntity player = context.getSender();
			ServerWorld SEWorld = player.getServerWorld();
			
			//get the location of the structure
			BlockPos structureLocation = SEWorld.func_241117_a_(Structure.FORTRESS, player.getPosition(),100, false);
			
			//this is where I want the server to send structureLocation back to the player

		});
		context.setPacketHandled(true);
	}
	
	
}

 

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now


×
×
  • Create New...

Important Information

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