Passive Abilities
Gắn hiệu ứng đặc biệt lên bất kỳ item nào bằng file .yml — không cần lập trình.
Một passive là kỹ năng ẩn gắn vào item (vũ khí, giáp, tay phụ). Khi sự kiện game xảy ra — đánh trúng, tiêu diệt mob, nhận sát thương, phá block, hoặc chết — passive tự kiểm tra điều kiện, tung xúc xắc, rồi kích hoạt một hoặc nhiều action.
Mỗi passive nằm trong một file .yml riêng. Nhiều passive có thể cùng gắn trên một item.
Cách hoạt động
Đánh trúng, tiêu diệt, nhận sát thương, phá block hoặc chết
Kiểm tra 6 slot (mũ, giáp, quần, giày, tay chính, tay phụ) tìm passive ID
target-type, must-be-crit, HP ngưỡng, expressions — bất kỳ fail là bỏ qua
So ngẫu nhiên với giá trị chance
Bỏ qua nếu passive đang hồi chiêu
Tất cả actions chạy theo thứ tự trong danh sách
Cấu trúc file
Đặt mỗi passive vào file .yml riêng trong thư mục:
plugins/YourPlugin/Listener/Passives/
execute_5pct.yml
speed_on_hit.yml
kill_drop_gold.yml
...
Tên file không quan trọng — plugin dùng key id bên trong file. Reload bằng lệnh /reload hoặc lệnh reload của plugin.
passive_ids. Nhiều ID cách nhau bằng dấu phẩy: execute_5pct,speed_on_hit.Các key cơ bản
| Key | Bắt buộc | Mô tả |
|---|---|---|
| id | Có | Định danh duy nhất. Phải khớp với ID trên item. Không dùng khoảng trắng. |
| display-name | Không | Tên hiển thị trong tooltip và debug. Hỗ trợ mã màu &a. |
| trigger | Có | Sự kiện kích hoạt passive. Xem Triggers. |
| chance | Không | Xác suất 0–100. Mặc định 100. Hỗ trợ biểu thức. |
| cooldown | Không | Giây hồi chiêu per-player. Mặc định 0 (không hồi). |
| condition | Không | Mục điều kiện. Xem Conditions. |
| actions | Có | Danh sách action. Xem Actions. |
Triggers
Key trigger xác định khi nào passive kích hoạt. Viết hoa toàn bộ.
actor = người chơi chết (chủ passive). victim trong context = kẻ đã giết (có thể null nếu chết do môi trường). Dùng target: VICTIM trong action DAMAGE để "trả thù" kẻ giết.must-be-crit, {victim_hp} tự fail an toàn. Trigger này tôn trọng WorldGuard/claim — nếu BlockBreakEvent bị huỷ, passive không chạy.Conditions (Điều kiện)
Tất cả điều kiện nằm trong mục condition:. Mọi điều kiện phải thỏa mãn — chỉ cần một fail là passive bị bỏ qua cho sự kiện đó.
target-type
Lọc loại thực thể bị tác động.
| Giá trị | Hành vi |
|---|---|
| BOTH | Bất kỳ thực thể nào — cả người chơi lẫn mob (mặc định) |
| PLAYER | Chỉ kích hoạt khi victim là người chơi khác |
| MOB | Chỉ kích hoạt khi victim là mob không phải người chơi |
| SELF | Chỉ kích hoạt khi người chơi vừa là actor vừa là victim (tự sát thương) |
must-be-crit
Đặt true để chỉ kích hoạt khi đòn đánh là chí mạng.
condition:
must-be-crit: true
target-hp-percent-below
Chỉ kích hoạt nếu HP hiện tại của victim thấp hơn ngưỡng này (% so với HP tối đa). Hỗ trợ biểu thức.
condition:
target-hp-percent-below: "20" # dưới 20% HP
target-hp-percent-below: "%player_level% * 0.5" # tăng theo cấp
expressions
Danh sách biểu thức so sánh tùy ý. Tất cả phải đúng.
condition:
expressions:
- "%player_level% >= 10"
- "{damage} > 5.0"
- "{victim_hp_percent} <= 30"
- "{actor_hp} > 10"
Toán tử hỗ trợ: >= <= == != > <
| Placeholder nội bộ | Giá trị |
|---|---|
| {damage} | Sát thương gây ra trong sự kiện này |
| {actor_level} | Cấp độ XP hiện tại của người chơi |
| {actor_hp} | HP hiện tại của người chơi |
| {victim_hp} | HP hiện tại của victim |
| {victim_hp_percent} | HP của victim tính theo % so với HP tối đa |
| %any_papi% | Bất kỳ placeholder PlaceholderAPI nào |
Biểu thức & PAPI
chance, duration-seconds, amount và hầu hết các key số đều chấp nhận biểu thức toán học thay vì số cố định.
chance: "50" # cố định 50%
chance: "%player_level% * 2" # 2% mỗi cấp, tự giới hạn 0–100
chance: "{damage} * 3" # sát thương càng cao xác suất càng lớn
amount: "%player_level% * 0.5" # damage scale theo cấp
duration-seconds: "{damage} / 2" # duration tăng theo damage
Chance & Cooldown
Số nguyên hoặc biểu thức. "100" = luôn kích hoạt. "0" = không bao giờ. Roll xảy ra sau conditions, trước cooldown.
Đơn vị giây. Per-player, per-passive. 0 = không hồi. Cooldown bắt đầu đếm sau khi passive thực thi thành công tất cả actions.
Tổng quan Actions
Actions khai báo dưới key actions: dạng danh sách YAML. Mỗi action bắt buộc có type. Hầu hết có key target nhận giá trị SELF hoặc VICTIM.
actions:
- type: EFFECT
target: SELF
effect: SPEED
seconds: "3"
level: "2"
- type: SOUND
target: SELF
sound: ENTITY_PLAYER_LEVELUP
DAMAGE
Gây sát thương lên target.
| Key | Mặc định | Mô tả |
|---|---|---|
| target | VICTIM | SELF hoặc VICTIM |
| amount | 0 | Lượng sát thương. Hỗ trợ biểu thức. |
| damage-type | TRUE | NORMAL — kích hoạt event Bukkit, bị giáp giảm. TRUE — xuyên giáp, set HP trực tiếp. |
- type: DAMAGE
target: VICTIM
amount: "%player_level% * 2"
damage-type: TRUE
EFFECT
Áp dụng potion effect lên target. Dùng để buff/debuff bằng hệ thống potion vanilla của Minecraft.
| Key | Mặc định | Mô tả |
|---|---|---|
| target | SELF | SELF hoặc VICTIM |
| effect | — | Tên PotionEffectType Bukkit. Ví dụ: SPEED, STRENGTH, SLOWNESS, POISON, REGENERATION... |
| seconds | 5 | Thời gian hiệu lực tính bằng giây. Hỗ trợ biểu thức. |
| level | 1 | Cấp độ effect (1 = cấp I, 2 = cấp II...). Hỗ trợ biểu thức. |
| ambient | false | Effect nhẹ kiểu beacon — ít hạt hơn, trong suốt hơn. |
| particles | true | false để ẩn hạt nhân potion xung quanh người chơi. |
- type: EFFECT
target: SELF
effect: SPEED
seconds: "3"
level: "2"
particles: false
effect: SPEED.BUFF_STAT
Buff tạm thời một stat nội bộ của plugin — cộng vào CombatStats ngay lập tức, trừ ngược lại sau duration-seconds giây.
| Key | Mặc định | Mô tả |
|---|---|---|
| target | SELF | Chỉ hoạt động với Player (SELF hoặc VICTIM nếu victim là player) |
| stat | — | Tên stat cần buff. Xem Danh sách stats. |
| amount | 0 | Lượng buff (có thể âm để nerf). Hỗ trợ biểu thức. |
| duration-seconds | 5 | Giây sau đó buff bị xóa. Hỗ trợ biểu thức. |
- type: BUFF_STAT
target: SELF
stat: critical_damage
amount: "%player_level% * 0.5"
duration-seconds: "5"
HEAL
Hồi máu cho target. Nếu percent > 0 thì ưu tiên hơn amount flat.
| Key | Mặc định | Mô tả |
|---|---|---|
| target | SELF | SELF hoặc VICTIM |
| amount | 0 | Hồi máu flat. Hỗ trợ biểu thức. |
| percent | 0 | Hồi % maxHP. Ưu tiên nếu > 0. Hỗ trợ biểu thức. |
- type: HEAL
target: SELF
percent: "10" # hồi 10% maxHP
FLAME
Đốt lửa target, gây damage mỗi giây trong suốt thời gian cháy.
| Key | Mặc định | Mô tả |
|---|---|---|
| target | VICTIM | SELF hoặc VICTIM |
| damage-per-second | 0 | Sát thương mỗi giây. Hỗ trợ biểu thức. |
| duration-seconds | 5 | Thời gian cháy tính bằng giây. Hỗ trợ biểu thức. |
| visual-fire | true | false để ẩn hiệu ứng lửa nhìn thấy, vẫn gây damage. |
- type: FLAME
target: VICTIM
damage-per-second: "%player_level% * 1.5"
duration-seconds: "5"
LAUNCH
Hất văng entity theo vector tự do dựa theo hướng nhìn của reference.
| Key | Mặc định | Mô tả |
|---|---|---|
| target | VICTIM | Entity bị hất — SELF hoặc VICTIM |
| reference | SELF | Entity dùng để tính hướng — SELF hoặc VICTIM |
| forward | 0 | Lực đẩy về phía trước (âm = đẩy lùi). Hỗ trợ biểu thức. |
| side | 0 | Lực đẩy sang ngang. Hỗ trợ biểu thức. |
| up | 0 | Lực đẩy lên trên. Hỗ trợ biểu thức. |
| reset-velocity | true | false để cộng dồn vào vận tốc hiện tại thay vì ghi đè. |
- type: LAUNCH
target: VICTIM
forward: "-1.5" # đẩy lùi
up: "0.8"
EXPLODE
Tạo vụ nổ tại vị trí target, gây sát thương cho thực thể trong vùng và hiển thị hiệu ứng hạt nhân tùy chỉnh.
| Key | Mặc định | Mô tả |
|---|---|---|
| target | VICTIM | SELF, VICTIM, hoặc BLOCK (chỉ ON_BLOCK_BREAK) |
| power | 4.0 | Sức mạnh nổ vanilla (ảnh hưởng hất văng và âm thanh). Hỗ trợ biểu thức. |
| radius | 4.0 | Bán kính tìm kiếm entity bị sát thương. Hỗ trợ biểu thức. |
| amount | 0 | Sát thương gây ra cho mỗi thực thể. Hỗ trợ biểu thức. |
| damage-type | TRUE | NORMAL hoặc TRUE (xuyên giáp). |
| include-self | false | true để người chơi chủ passive cũng bị sát thương. |
| break-blocks | false | true để nổ phá block (tôn trọng WorldGuard). |
| particle-scale | 1.0 | Hệ số nhân độ lớn và độ lan tỏa của hiệu ứng hạt nhân nổ. |
- type: EXPLODE
target: VICTIM
power: "3.0"
radius: "5.0"
amount: "%player_level% * 3"
damage-type: TRUE
break-blocks: false
particle-scale: 2.0
DROP_ITEM
Thả item xuống đất tại vị trí target.
| Key | Mặc định | Mô tả |
|---|---|---|
| target | VICTIM | SELF hoặc VICTIM |
| material | GOLD_NUGGET | Tên vật liệu Bukkit. Ví dụ: DIAMOND, GOLD_INGOT... |
| amount | 1 | Số lượng. Hỗ trợ range "1-3", biểu thức, và PAPI. Range cũng hỗ trợ biểu thức: "1-%player_level%". |
- type: DROP_ITEM
target: VICTIM
material: GOLD_NUGGET
amount: "1-3"
COMMAND
Chạy một lệnh tùy ý — "van an toàn" cho mọi hành vi chưa có mechanic riêng (give item, economy, gọi plugin khác...).
| Key | Mặc định | Mô tả |
|---|---|---|
| target | SELF | Entity dùng để thay {player} — SELF hoặc VICTIM |
| mode | OP | OP — console chạy, toàn quyền. PLAYER — chính target chạy, bị giới hạn theo permission. |
| command | — | Lệnh cần chạy. Không có dấu / đầu. |
Placeholder trong command: {player} → tên target, {actor} → tên người chơi chủ passive, {damage} → sát thương (1 chữ số thập phân).
- type: COMMAND
target: SELF
mode: OP
command: "give {player} diamond 1"
MESSAGE
Gửi tin nhắn chat riêng cho player. Chỉ hoạt động nếu target là Player (mob không nhận tin nhắn).
| Key | Mặc định | Mô tả |
|---|---|---|
| target | SELF | SELF hoặc VICTIM |
| message | — | Nội dung tin nhắn. Hỗ trợ mã màu &a. |
Placeholder trong message: {actor_name}, {victim_name}, {damage}.
- type: MESSAGE
target: SELF
message: "&c[Tử Thần] &7Bạn vừa kết liễu &f{victim_name}&7!"
SOUND
Phát âm thanh tại vị trí target. Mọi người chơi trong phạm vi tự nhiên đều nghe thấy.
| Key | Mặc định | Mô tả |
|---|---|---|
| target | SELF | SELF hoặc VICTIM — vị trí phát âm thanh |
| sound | — | Tên Sound enum Bukkit. Ví dụ: ENTITY_GENERIC_EXPLODE, ENTITY_PLAYER_LEVELUP... |
| volume | 1.0 | Âm lượng. |
| pitch | 1.0 | Cao độ (0.5–2.0). |
- type: SOUND
target: SELF
sound: ENTITY_PLAYER_LEVELUP
pitch: 1.5
PARTICLE_ANIMATION
Hiệu ứng particle hình tròn hoặc hình cầu xoay quanh target trong một khoảng thời gian.
| Key | Mặc định | Mô tả |
|---|---|---|
| target | SELF | SELF hoặc VICTIM |
| particle | FLAME | Loại hạt nhân Bukkit. |
| shape | CIRCLE | CIRCLE — vòng tròn nằm ngang. SPHERE — quả cầu 3D. |
| radius | 1.0 | Bán kính vòng/cầu. Hỗ trợ biểu thức. |
| points-per-tick | 12 | Số điểm particle vẽ mỗi lần update. Hỗ trợ biểu thức. |
| particle-per-point | 1 | Số hạt mỗi điểm. Hỗ trợ biểu thức. |
| duration-seconds | 3 | Thời gian hiệu ứng tồn tại. Hỗ trợ biểu thức. |
| update-interval-ticks | 4 | Tần suất cập nhật (tick). Thấp hơn = mượt hơn nhưng tốn tài nguyên hơn. |
| rotate | true | false để không xoay — hiệu ứng tĩnh. |
| dust-color | #FF5500 | Màu hex khi particle là DUST. |
| block-material | OAK_LEAVES | Vật liệu khi particle là BLOCK hoặc FALLING_DUST. |
- type: PARTICLE_ANIMATION
target: SELF
particle: ENCHANT
shape: SPHERE
radius: "1.5"
duration-seconds: "2"
PARTICLE_PROJECTILE
Phóng viên đạn hạt nhân về phía victim. Khi trúng mục tiêu, gây sát thương và có thể kích hoạt hiệu ứng va chạm hoặc vệt bay.
Điều khiển đạn bay
| Key | Mặc định | Mô tả |
|---|---|---|
| particle | FLAME | Loại hạt nhân trên đường bay. |
| particle-per-step | 1 | Số hạt mỗi bước di chuyển. Hỗ trợ biểu thức. |
| speed | 1.0 | Block/tick. Hỗ trợ biểu thức. |
| amount | 0 | Sát thương khi trúng. Hỗ trợ biểu thức. |
| damage-type | NORMAL | NORMAL hoặc TRUE. |
| hit-radius | 1.0 | Bán kính hitbox. Hỗ trợ biểu thức. |
| hit-actor-self | false | true nếu đạn có thể trúng người bắn. |
| immediate-impact | false | true để bỏ qua bay, impact ngay tại chỗ. |
| dust-color | #FFAA00 | Màu hex cho particle DUST. |
| block-material | MAGMA_BLOCK | Vật liệu cho BLOCK/FALLING_DUST. |
Hiệu ứng bay (Flight) & Sweep
| Key | Mặc định | Mô tả |
|---|---|---|
| flight-shape | NONE | Hình dạng khi bay: NONE hoặc TORNADO. |
| flight-radius | 0.45 | Bán kính hiệu ứng bay. Hỗ trợ biểu thức. |
| flight-rotation-speed | 0.55 | Tốc độ xoay của hiệu ứng bay. Hỗ trợ biểu thức. |
| flight-rings | 2 | Số vòng xoáy (cho TORNADO). |
| flight-points-per-ring | 6 | Số điểm hạt mỗi vòng. |
| flight-grow | true | Hiệu ứng có nở rộng dần theo thời gian không. |
| flight-grow-steps | 20 | Số bước để đạt kích thước tối đa. Hỗ trợ biểu thức. |
| sweep-attack | false | Bật hiệu ứng chém SWEEP_ATTACK dọc đường bay. |
| sweep-attack-interval | 4 | Tần suất tick để spawn hiệu ứng chém. |
Hiệu ứng va chạm (Impact)
| Key | Mặc định | Mô tả |
|---|---|---|
| impact-shape | NONE | CIRCLE, SPHERE, BURST, hoặc TORNADO. |
| impact-radius | 3.0 | Bán kính vùng impact. Hỗ trợ biểu thức. |
| impact-duration-ticks | 15 | Thời gian tồn tại (tick). Hỗ trợ biểu thức. |
| impact-damage | giống amount | Sát thương mỗi tick impact. Hỗ trợ biểu thức. |
BREAK_AREA
Đào thêm block xung quanh block vừa phá. Chỉ dùng với trigger ON_BLOCK_BREAK. Tôn trọng WorldGuard/claim. Rớt item theo enchant của tool.
| Key | Mặc định | Mô tả |
|---|---|---|
| size | 3 | Kích thước cạnh vùng đào (3 = 3×3, 5 = 5×5). Nên dùng số lẻ. Hỗ trợ biểu thức. |
| depth | 1 | Độ sâu thêm theo trục Y. Hỗ trợ biểu thức. |
| use-tool-drops | true | true = rớt item theo Fortune/Silk Touch của tool. false = rớt mặc định. |
| excluded-materials | BEDROCK,BARRIER,... | Danh sách block không được đào, phân cách bởi dấu phẩy. |
- type: BREAK_AREA
size: "3"
depth: "1"
use-tool-drops: true
excluded-materials: "BEDROCK,BARRIER,END_PORTAL_FRAME"
DELAY
Chờ N giây rồi mới chạy danh sách children. Dùng để tạo hiệu ứng trễ.
| Key | Mặc định | Mô tả |
|---|---|---|
| seconds | 1 | Giây cần chờ trước khi chạy children. Hỗ trợ biểu thức. |
| children | — | Danh sách action chạy sau delay. Cú pháp giống actions:. |
- type: DELAY
seconds: "2"
children:
- type: EXPLODE
target: VICTIM
power: "4.0"
amount: "20"
HIT_COUNTER
Đếm số lần sự kiện xảy ra và chỉ kích hoạt children khi đạt đủ ngưỡng every lần.
| Key | Mặc định | Mô tả |
|---|---|---|
| every | 5 | Số lần trigger cần thiết để chạy children. Hỗ trợ biểu thức. |
| reset-after | every | Số lần trigger tối đa trước khi bộ đếm tự reset về 0. |
| children | — | Danh sách các actions sẽ chạy khi đạt ngưỡng. |
- type: HIT_COUNTER
every: "5"
reset-after: "10"
children:
- type: DAMAGE
amount: "%player_level% * 5"
REPEAT
Lặp lại toàn bộ danh sách children, cách nhau interval-seconds giây, tổng times lần.
| Key | Mặc định | Mô tả |
|---|---|---|
| times | 1 | Số lần lặp. Hỗ trợ biểu thức. |
| interval-seconds | 1 | Giây giữa mỗi lần lặp. Hỗ trợ biểu thức. |
| children | — | Danh sách action lặp lại. |
- type: REPEAT
times: "4"
interval-seconds: "1"
children:
- type: EFFECT
target: VICTIM
effect: POISON
seconds: "2"
level: "1"
Impact Shapes
Cấu hình bằng impact-shape trong PARTICLE_PROJECTILE. Hình dạng chỉ ảnh hưởng đến hiệu ứng nhìn thấy — vùng sát thương luôn là hình cầu kiểm soát bởi impact-radius.
Không có hiệu ứng hình ảnh. Sát thương vẫn áp dụng nếu có impact-damage.
Vòng tròn mở rộng dần, bay lên và mờ dần.
Quả cầu 3D mở rộng đều ra ngoài.
Hạt nhân bắn tung ra mọi hướng như vụ nổ.
Cột xoáy xoắn ốc dâng lên trong suốt thời gian.
Danh sách Stats (BUFF_STAT)
Các giá trị hợp lệ cho key stat trong action BUFF_STAT:
Ví dụ đầy đủ
Tốc Chiến — buff Speed khi đánh, 80% cơ hội
id: speed_on_hit
display-name: "&b[Tốc Chiến]"
trigger: ON_HIT
condition:
target-type: BOTH
chance: "80"
cooldown: 3
actions:
- type: EFFECT
target: SELF
effect: SPEED
seconds: "3"
level: "2"
particles: false
Tử Thần — kết liễu tức thì khi HP dưới 5%
id: execute_5pct
display-name: "&c[Tử Thần]"
trigger: ON_HIT
condition:
target-hp-percent-below: "5"
target-type: BOTH
chance: "100"
cooldown: 0
actions:
- type: DAMAGE
target: VICTIM
amount: 99999
damage-type: TRUE
- type: MESSAGE
target: SELF
message: "&c[Tử Thần] &7Kết liễu &f{victim_name}&7!"
- type: SOUND
target: SELF
sound: ENTITY_PLAYER_LEVELUP
pitch: 2.0
Cầu Lửa — chỉ khi crit, đạn + hiệu ứng hình cầu
id: fire_orb
display-name: "&6[Cầu Lửa]"
trigger: ON_HIT
condition:
must-be-crit: true
target-type: BOTH
chance: "30"
cooldown: 3
actions:
- type: PARTICLE_PROJECTILE
particle: FLAME
particle-per-step: "3"
speed: "1.5"
amount: "8"
damage-type: TRUE
hit-radius: "1.2"
impact-shape: SPHERE
impact-particle: LAVA
impact-radius: "4.0"
impact-duration-ticks: "20"
impact-damage: "3"
impact-damage-type: TRUE
Trả Thù — đánh lại kẻ giết khi chết
id: revenge_on_death
display-name: "&4[Trả Thù]"
trigger: ON_DEATH
condition:
target-type: PLAYER # chỉ khi bị player giết
chance: "100"
cooldown: 0
actions:
- type: DAMAGE
target: VICTIM # victim = kẻ đã giết
amount: "%player_level% * 3"
damage-type: TRUE
- type: MESSAGE
target: VICTIM
message: "&4[Trả Thù] &7{actor_name} đã trả thù từ cõi chết!"
Nổ Chậm — nổ sau 2 giây khi giết
id: delayed_explode
display-name: "&e[Nổ Chậm]"
trigger: ON_KILL
chance: "100"
cooldown: 5
actions:
- type: MESSAGE
target: SELF
message: "&e[Nổ Chậm] &7Đang tích năng lượng..."
- type: DELAY
seconds: "2"
children:
- type: EXPLODE
target: SELF
power: "3.0"
radius: "5.0"
amount: "%player_level% * 2"
damage-type: TRUE
include-self: false
- type: SOUND
target: SELF
sound: ENTITY_GENERIC_EXPLODE
Cuốc TNT — đào 3×3 khi phá block
id: tnt_pickaxe
display-name: "&6[Cuốc TNT]"
trigger: ON_BLOCK_BREAK
chance: "100"
cooldown: 0
actions:
- type: BREAK_AREA
size: "3"
depth: "1"
use-tool-drops: true
excluded-materials: "BEDROCK,BARRIER"
Độc Lặp — áp độc 4 lần, mỗi lần cách 1 giây
id: repeat_poison
display-name: "&2[Độc Lặp]"
trigger: ON_HIT
condition:
target-type: BOTH
expressions:
- "%player_level% >= 20"
chance: "25"
cooldown: 10
actions:
- type: REPEAT
times: "4"
interval-seconds: "1"
children:
- type: EFFECT
target: VICTIM
effect: POISON
seconds: "2"
level: "2"
- type: PARTICLE_ANIMATION
target: VICTIM
particle: WITCH
shape: CIRCLE
radius: "0.8"
duration-seconds: "1"
Rơi vàng — 25% khi giết mob
id: kill_drop_gold
trigger: ON_KILL
condition:
target-type: MOB
chance: "25"
cooldown: 0
actions:
- type: DROP_ITEM
target: VICTIM
material: GOLD_NUGGET
amount: "1-3"