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 ada hasil yang jelas untuk transaksi tersebut - menunjukkan bahwa ada sesuatu yang salah |
|
Transaksi berhasil diselesaikan |
|
Transaksi gagal karena alasan yang diharapkan (misalnya data yang tidak sesuai) |
|
Transaksi gagal karena alasan tak terduga |
|
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.
|
berisi semua data yang berhasil di atur |
|
mengandung semua data yang bisa diganti dengan berhasil mengatur data |
|
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);
}
}