Skocz do zawartości
  • 0

jak zrobic w pluginie zapisywanie itemow kanalami bungeecord


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
https://skript.pl/temat/52948-jak-zrobic-w-pluginie-zapisywanie-itemow-kanalami-bungeecord/#findComment-323129
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
https://skript.pl/temat/52948-jak-zrobic-w-pluginie-zapisywanie-itemow-kanalami-bungeecord/#findComment-323135
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
https://skript.pl/temat/52948-jak-zrobic-w-pluginie-zapisywanie-itemow-kanalami-bungeecord/#findComment-323144
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
https://skript.pl/temat/52948-jak-zrobic-w-pluginie-zapisywanie-itemow-kanalami-bungeecord/#findComment-323145
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ę...