Transaksi

Membaca hasilnya

Untuk semua yang Anda tawarkan ke dudukan data, metode penawaran akan menghasilkan :javadoc: DataHasilTransaksi. Objek ini akan berisi hal berikut:

Tipe

Itu :javadoc: DataHasilTransaksi.Tipe menunjukkan apakah transaksi berhasil diselesaikan dan, jika tidak, bagaimana hal itu gagal.

TIDAK TERDEFINISIKAN

Tidak ada hasil yang jelas untuk transaksi tersebut - menunjukkan bahwa ada sesuatu yang salah

SUKSES

Transaksi berhasil diselesaikan

GAGAL

Transaksi gagal karena alasan yang diharapkan (misalnya data yang tidak sesuai)

EROR

Transaksi gagal karena alasan tak terduga

BATALKAN

Sebuah acara untuk transaksi ini dibatalkan

Data yang terpengaruh

Hasilnya juga menyediakan beberapa daftar yang tetap berisi kotak nilai yang tidak berubah yang mewakili data yang terlibat dalam transaksi.

SuksesdapatkanData()

berisi semua data yang berhasil di atur

dapatkanDataPengganti()

mengandung semua data yang bisa diganti dengan berhasil mengatur data

dapatkanDataDitolak()

mengandung semua data yang tidak dapat diatur

Contoh

Menyembuhkan Pemain

Tentunya Anda ingat contoh penyembuhan di halaman kunci. Bayangkan seorang pemain yang setengah hati (yang sama dengan 1 kesehatan) disembuhkan seperti itu. DataHasilTransaksi` dalam hal ini akan terlihat seperti ini:

  • dapatMengetik()``akan mengembalikan``SUKSES

  • dapatditolakData() akan menjadi kosong daftar

  • `` getReplacedData () `` akan berisi satu wadah nilai untuk tombol `` Keys.HEALTH`` dengan nilai 1,0

  • `` getSuccessfulData () `` akan berisi satu wadah nilai untuk tombol `` Keys.HEALTH`` dengan nilai 20,0

Sekarang apa yang akan berbeda jika kita menggunakan contoh penyembuhan dari halaman Data Manipulator? Karena data manipulator HealthData berisi nilai untuk kedua kesehatan saat ini dan kesehatan maksimal, sebagai tambahan hasil di atas, keduanya daftar getReplacedData() dan daftar getSuccessfulData() akan berisi satu lagi elemen: Isi container untuk kunci Keys.MAX_HEALTH dengan nilai 20.0.

Menawarkan DataKesehatan ke blok batu

Sekarang contoh-contoh yang disebutkan di atas dikodekan sedemikian rupa sehingga mereka akan gagal secara diam-diam daripada mencoba menawarkan data yang tidak sesuai. Tapi bayangkan kita mengambil (sembuh total) DataSehat pemain yang benar-benar sembuh dan mencoba menawarkannya ke :javadoc:`Lokasi` dari blok batu yang saat ini dia jalani. Kita bisa melakukan ini, karena Lokasi juga merupakan dudukan data. Dan jika kita melakukannya, itu akan memberi kita penghargaan dengan DataHasilTransaksi seperti ini:

  • getTipe() akan kembali KEGAGALAN

  • `` getRejectedData () `` akan berisi dua wadah nilai untuk tombol `` HEALTH`` dan `` MAX_HEALTH``, masing-masing dengan nilai 20,0

  • `` getReplacedData () `` dan `` getSuccessfulData () `` akan menjadi daftar kosong

Mengembalikan Transaksi

Karena segala sesuatu tentang hasil transaksi tidak berubah, ini dapat berfungsi untuk dokumentasi perubahan data. Dan ini juga memungkinkan perubahan yang di dalamnya dibatalkan. Untuk itu, cukup kirimkan hasil transaksi ke metode ``ulang()``pemegang data. Ini sangat berguna karena beberapa penawaran data mungkin sebagian berhasil, sehingga satu atau lebih nilai berhasil ditulis ke dudukan data, namun satu nilai lagi tidak dapat diterima. Karena Anda mungkin ingin membatalkan keberhasilan sebagian.

Contoh Kode: Mengembalikan transaksi

import org.spongepowered.api.data.DataHolder;
import org.spongepowered.api.data.DataTransactionResult;
import org.spongepowered.api.data.manipulator.DataManipulator;

public void safeOffer(DataHolder target, DataManipulator data) {
    DataTransactionResult result = target.offer(data);
    if (result.getType() != DataTransactionResult.Type.SUCCESS) {
        target.undo(result);
    }
}