Пакет - смерть игрока и его возрождения по локациям

Версия Minecraft
1.7.10
477
7
51
Изменил гуи смерти, поставил локации по возрождению, как телепортировать игрока при нажатии на нее?
И так же подскажите, там нужны пакеты, которые нужно отправлять на сервер, может кто сказать какие и я 1 раз с пакетами работаю.
 
Решение
Передаёшь нужные значения в пакет и его отправляешь:
Java:
TeleportPlayerMessage message = new TeleportPlayerMessage();
message.x = Double.parseDouble(fields[0].getText().trim());
message.y = Double.parseDouble(fields[1].getText().trim());
message.z = Double.parseDouble(fields[2].getText().trim());
message.dim = Integer.parseInt(fields[3].getText().trim());
TeleportMod.network.sendToServer(message);
А регистрируешь в главном классе, типа так:
Java:
    public static final SimpleNetworkWrapper network = NetworkRegistry.INSTANCE.newSimpleChannel(MODID);

    @Mod.EventHandler
    public void preInit(FMLPreInitializationEvent event) {
        network.registerMessage(TeleportPlayerMessage.Handler.class, TeleportPlayerMessage.class, 0...

timaxa007

Модератор
5,831
409
672
С сервера отправить пакет, с локализацией спавна и их как-бы ID.
На клиенте выбирается локализация игрока, отправляется ID на сервер.
На сервере обработать пакет, по ID найти куда спавнить игрока, а самого игрока взять из пакета, это объект EntityPlayerMP - MessageContext#getServerHandler().playerEntity.
 
477
7
51
С сервера отправить пакет, с локализацией спавна и их как-бы ID.
На клиенте выбирается локализация игрока, отправляется ID на сервер.
На сервере обработать пакет, по ID найти куда спавнить игрока, а самого игрока взять из пакета, это объект EntityPlayerMP - MessageContext#getServerHandler().playerEntity.
сможешь это написать мне ? не за бесплатно и цену скажи)
 

timaxa007

Модератор
5,831
409
672
@mrgufiks, я же написал, что нужно время. Но то что тебе надо из первого сообщения, типа примерно так должно выглядеть:
Java:
public class TeleportPlayerMessage implements IMessage {

    public double x, y, z;
    public int dim;

    public TeleportPlayerMessage() {}

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

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

    public static class Handler implements IMessageHandler<TeleportPlayerMessage, IMessage> {

        @Override
        public IMessage onMessage(TeleportPlayerMessage packet, MessageContext message) {
            if (message.side.isClient())
                act(packet);
            else
                act(message.getServerHandler().playerEntity, packet);
            return null;
        }

        @SideOnly(Side.CLIENT)
        private void act(TeleportPlayerMessage packet) {
            Minecraft mc = Minecraft.getMinecraft();
            if (packet.dim != mc.thePlayer.dimension) mc.thePlayer.travelToDimension(packet.dim);
            mc.thePlayer.setPosition(packet.x, packet.y, packet.z);
        }

        private void act(EntityPlayerMP player, TeleportPlayerMessage packet) {
            if (packet.dim != player.dimension) player.travelToDimension(packet.dim);
            player.setPosition(packet.x, packet.y, packet.z);
        }

    }

}
 
477
7
51
@mrgufiks, я же написал, что нужно время. Но то что тебе надо из первого сообщения, типа примерно так должно выглядеть:
можешь сказать вот кнопка из гуи к ней действия как мне отправить пакет зарегистрировать отправку и как телепортировать игрока туда ?
 

timaxa007

Модератор
5,831
409
672
Передаёшь нужные значения в пакет и его отправляешь:
Java:
TeleportPlayerMessage message = new TeleportPlayerMessage();
message.x = Double.parseDouble(fields[0].getText().trim());
message.y = Double.parseDouble(fields[1].getText().trim());
message.z = Double.parseDouble(fields[2].getText().trim());
message.dim = Integer.parseInt(fields[3].getText().trim());
TeleportMod.network.sendToServer(message);
А регистрируешь в главном классе, типа так:
Java:
    public static final SimpleNetworkWrapper network = NetworkRegistry.INSTANCE.newSimpleChannel(MODID);

    @Mod.EventHandler
    public void preInit(FMLPreInitializationEvent event) {
        network.registerMessage(TeleportPlayerMessage.Handler.class, TeleportPlayerMessage.class, 0, Side.CLIENT);
        network.registerMessage(TeleportPlayerMessage.Handler.class, TeleportPlayerMessage.class, 0, Side.SERVER);
    }
 

Sainthozier

Стрелочник
623
11
369
тогда код в студию
Мда. Тимаха чуть ли не единственный, кто и советом поможет, и пример даст, а ты вот такое ему пишешь... Некрасиво поступаешь.
P.S. Соррян за оффтоп.
 
Сверху