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.
|
|
|
|
|
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
Now what would be different if we used the healing example from the Kustom Data page instead? Since the
HealthData
data manipulator contains values for both the current and the maximum health, in addition to the
above result, both the getReplacedData()
list and the getSuccessfulData()
list would contain one more element:
A value container for the Keys.MAX_HEALTH
key with a value of 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);
}
}