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);
}
}