Skocz do zawartości
  • 0

jak zrobic w pluginie zapisywanie itemow kanalami bungeecord


ez_top1

Pytanie

9 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
5 godzin temu, kerpson napisał:

Stwórz własny lub użyj gotowego serializera/deserializera itemów z tekstu

public static String itemStackArrayToBase64(ItemStack[] items) throws IllegalStateException {
    try {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream);

        // Write the size of the inventory
        dataOutput.writeInt(items.length);

        // Save every element in the list
        for (int i = 0; i < items.length; i++) {
            dataOutput.writeObject(items[i]);
        }

        // Serialize that array
        dataOutput.close();
        return Base64Coder.encodeLines(outputStream.toByteArray());
    } catch (Exception e) {
        throw new IllegalStateException("Unable to save item stacks.", e);
    }
}

public static ItemStack[] itemStackArrayFromBase64(String data) throws IOException {
    try {
        ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64Coder.decodeLines(data));
        BukkitObjectInputStream dataInput = new BukkitObjectInputStream(inputStream);
        ItemStack[] items = new ItemStack[dataInput.readInt()];

        // Read the serialized inventory
        for (int i = 0; i < items.length; i++) {
            items[i] = (ItemStack) dataInput.readObject();
        }

        dataInput.close();
        return items;
    } catch (ClassNotFoundException e) {
        throw new IOException("Unable to decode class type.", e);
    }
}
 takie cos?
Glicz

Wstawiam kod w code. 

Notatka dodana przez Glicz

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
1 godzinę temu, Ixidi napisał:

mam to wyslac subchannelem? czy czym

 

1 godzinę temu, Ixidi napisał:

zrobilem cos takiego komenda

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if(sender instanceof Player) {
            Player p = (Player) sender;
            if (args.length == 1) {
                ConnectUtil.sendPlayer(p, args[0]);
                p.sendMessage("Wyslano cie do servera" + args[0]);
                String is = Inv.itemStackArrayToBase64(p.getInventory().getContents());
                ByteArrayOutputStream bb = new ByteArrayOutputStream();
                DataOutputStream outt = new DataOutputStream(bb);
                try {
                    outt.writeUTF("Forward");
                    outt.writeUTF("ALL");
                    outt.writeUTF("test");
                    outt.writeUTF(is);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                p.sendPluginMessage(Main.getPlugin(), "BungeeCord", bb.toByteArray());
            }
        }
        return false;
    }
}

odbieranie

@Override
public void onPluginMessageReceived(String channel, Player player, byte[] message) {
    if (!channel.equals("BungeeCord")) {
        return;
    }
    try {
        ByteArrayDataInput in = ByteStreams.newDataInput(message);
        String subChannel = in.readUTF();
        if (!subChannel.equals("test")) {
            ItemStack[] is = Inv.itemStackArrayFromBase64(String.valueOf(message));
            player.getInventory().setContents(is);
        }
    } catch (IOException e) {
        e.printStackTrace();

    }
}

tylko cos mi nie dziala :c

Glicz

Łączę posty, wstawiam kod w code. 

Notatka dodana przez Glicz

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Wysyłasz wiadomość do bungeecorda, w której jest przetrzymywany ekwipunek gracza(zapisany w stringu), gdy to będzie potrzebne wysyłasz to na serwer docelowy. Ja szczerze mówiąc nie jestem zwolennikiem takich rozwiązań, w prawdzie kanały bungee są dobre, działają dobrze ale jednak wybrałbym jakąś bazę danych(chociażby redis który jest szybki, dynamiczny i w skrócie przeznaczony do tego typu działań)

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
1 minutę temu, kerpson napisał:

Wysyłasz wiadomość do bungeecorda, w której jest przetrzymywany ekwipunek gracza(zapisany w stringu), gdy to będzie potrzebne wysyłasz to na serwer docelowy. Ja szczerze mówiąc nie jestem zwolennikiem takich rozwiązań, w prawdzie kanały bungee są dobre, działają dobrze ale jednak wybrałbym jakąś bazę danych(chociażby redis który jest szybki, dynamiczny i w skrócie przeznaczony do tego typu działań)

ale jakbyscie mogli pomoc z tym pluginem to byl bym bardzo wdzieczny. btw wiem ze lepsze rozwiazanie jest zrobienie redis lub kryoneta lub sockety

ale poprostu potzebuje do jednego projektu

Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Nieaktywny
Odpowiedz na pytanie...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...