جدولهای لوت: poolها، rollها و تفاوت بین entryها و functionها
یک جدول لوت که چیزی دراپ نمیکند، معمولاً وزنها یا شرطهای آن در لایه اشتباهی قرار دارند. در اینجا مشخص شده که هر سطح تودرتو چه چیزی را کنترل میکند و کدام تابعها ارزش شناختن دارند.
فایل JSON جدول لوت 4 سطح عمق دارد و هر سطح معنای متفاوتی میدهد. تقریباً هر مشکل «جدول من چیزی دراپ نمیکند» به خاطر شرطی است که یک لایه دورتر از جایی که باید باشد قرار گرفته است.
چهار سطح
table
└── pools[] how many independent draws
└── entries[] what can come out of this draw
└── functions[] modify the item that came out
rollsروی یک pool مشخص میکند که آن pool چند بار قرعهکشی میکند. یک pool باrolls: 3draws
سه بار از همان لیست entry انتخاب میکند.
weightروی یک entry، نسبت به pool خودش سنجیده میشود. نیازی نیست مجموع وزنها به
مقدار خاصی برسد؛ یک entry با وزن 10 در برابر یکی با وزن 90، یکدهم دفعات انتخاب میشود.
conditionsدر هر سطحی وجود دارند و معانی متفاوتی دارند. روی یک pool مانع از
کل قرعهکشی میشوند. روی یک entry مانع همان یک گزینه میشوند. روی یک function فقط مانع اعمال تغییرات میشوند.
تضمین کردن یک دراپ نیازمند pool اختصاصی خودش است
وزنها نمیتوانند چیزی را تضمین کنند، زیرا یک pool به ازای هر roll دقیقاً یک entry را انتخاب میکند. جدولی که باید همیشه یک نقشه به همراه لوت تصادفی دراپ کند به دو pool نیاز دارد:
"pools": [
{ "rolls": 1, "entries": [ { "type": "minecraft:item", "name": "minecraft:filled_map" } ] },
{ "rolls": { "min": 2, "max": 4 }, "entries": [ … weighted list … ] }
]
pool اول دارای یک entry تکی است، بنابراین همیشه آن را تولید میکند. pool دوم بین 2–4 بار از لیست وزندار roll میزند.
تابعهای کاربردی و مهم
| Function | عملکرد |
|---|---|
set_count | یک عدد ثابت یا یک uniform range |
enchant_randomly | انچنتهای تصادفی، به صورت اختیاری از یک لیست |
enchant_with_levels | مانند یک enchanting table در N سطح — شامل treasure در صورت درخواست |
set_components | نام سفارشی، lore، هر کامپوننت داده |
looting_enchant | پاداش به ازای هر سطح Looting؛ فقط جدولهای entity |
set_damage | durability به صورت کسری، بنابراین 0.5 is half-worn |
furnace_smelt | حالت پختهشده زمانی که ماب هنگام آتش گرفتن میمیرد |
enchant_with_levels and enchant_randomly are not interchangeable. The first mimics an enchanting table and respects level costs; the second picks arbitrarily and can produce combinations the game would never generate.
شرطهای پرکاربرد
random_chance— a flat probabilityrandom_chance_with_enchanted_bonus— the modern Looting-aware chancekilled_by_player— the reason your rare drop never appears from a fall deathentity_properties— check the victim's type, state or equipmentmatch_tool— check the tool used, for block tables
تست کردن بدون ساخت مجدد جهان
/loot give @s loot my_pack:chests/treasure
جدول را مستقیماً در inventory شما دراپ میکند. /loot spawn, /loot insert <pos> and /loot replace cover the other placements. This is far faster than placing chests and reloading, and it is the only sane way to check weight distributions.
جدولهای چند pool را همراه با تابعها و شرطها در لایه مناسب بسازید در سازنده پیشرفته جدول لوت.