Compatibility
Minecraft: Java Edition
Platforms
Links
Tags
Creators
Details
UniquePin
A lightweight Paper and Folia plugin that requires players to enter a secure 6-digit PIN code using an in-game dialog keypad every time they join the server.
The plugin features secure SHA-256 hashing with individual salts, strict brute-force protection, login attempt limits, and complete movement and action restrictions until verification is successful.
It is designed for servers that want to eliminate session hijacking, prevent unauthorized account access, and ensure maximum security right upon player connection.

repin
To change your PIN using the RePIN button, you first have to enter your current 6-digit PIN so the system can verify your identity. Just tap out the numbers on the keypad there are delete and back/exit buttons if you make a mistake. As soon as your old PIN is confirmed, it moves you right along to set your new PIN.
Configuration
# =====================================================
# UniquePin - config.yml
# Paper / Folia 1.21.11 | MiniMessage + HEX supported
# =====================================================
# สำคัญ: ปลั๊กอินนี้ "ไม่มี SESSION" โดยตั้งใจ
# ผู้เล่นต้องใส่ PIN ใหม่ "ทุกครั้ง" ที่เข้าเซิร์ฟเวอร์
# (no-session: true เปลี่ยนไม่ได้ ป้องกันการแอบจำสถานะปลดล็อค)
no-session: true
pin:
# ความยาวพิน (dialog input + ปุ่มกด ยึดค่านี้ทั้งหมด)
length: 6
# อนุญาตเฉพาะตัวเลข 0-9 เท่านั้น
numeric-only: true
# ห้ามพินซ้ำเลขเดียวเช่น 000000 / 111111
forbid-repeating-digit: true
# รายการพินต้องห้ามเพิ่มเติม (เช่น 123456)
forbidden:
- "123456"
- "654321"
- "000000"
- "111111"
- "121212"
security:
# SHA-256 + salt สุ่มรายคน (ไม่เก็บพินจริงลงดิสก์)
hash-algorithm: "SHA-256"
salt-bytes: 16
# หน่วงเวลาตอบสนองกัน brute-force (มิลลิวินาที)
verify-delay-ms: 350
# จำกัดกดปุ่ม dialog ต่อวินาที กันสแปมแพ็กเก็ตจาก hack client
max-clicks-per-second: 8
login:
# ใส่ผิดได้กี่ครั้งก่อนโดนล็อคพิน
max-attempts: 3
# นานเกินกี่นาที (ยังล็อคอยู่) = เตะออก
timeout-minutes: 5
# เวลาล็อคพินเมื่อใส่ผิดครบ 3 ครั้ง (วินาที)
lockout-seconds: 60
# ขณะยังล็อคอยู่ ห้ามทำอะไรบ้าง (true = บล็อค)
lock:
move: true
chat: true
# คำสั่งที่ "อนุญาต" ขณะล็อค (นอกนั้นบล็อคหมด กันใช้คำสั่งข้าม)
allowed-commands:
- "/pin"
- "/repin"
- "/pincreate"
tab-complete: true
interact: true
break-block: true
place-block: true
damage-incoming: true
damage-outgoing: true
hunger: true
drop-item: true
pickup-item: true
inventory-click: true
inventory-open: true
teleport: true
portal: true
bed-enter: true
edit-book: true
swap-hand: true
change-held-slot: true
toggle-flight: true
# เอฟเฟกต์ตอนล็อค (กัน hack เดิน) - SLOWNESS
freeze-effects: true
# จอมืด (DARKNESS) ขณะอยู่หน้าพิน ปลดล็อคแล้วหาย - true = เปิด
darkness-effect: true
# อนุญาตให้ตกลงมาตามปกติขณะล็อค (ไม่ลอยค้าง ไม่โดน fly-kick)
allow-falling: true
# ถ้าตำแหน่งขยับเกินกี่บล็อคขณะล็อค = ดึงกลับ (กัน teleport hack)
max-position-drift: 1.5
dialog:
# รูปแบบ UI: AUTO (เปิด Paper Dialog ถ้าเซิร์ฟเวอร์รองรับ ถ้าไม่รองรับจะเปิด Chest GUI อัตโนมัติ) | DIALOG | GUI
mode: "AUTO"
# หน่วงก่อนเปิด dialog หลังจอย (ticks) - 2 ticks เพื่อความรวดเร็วและไม่หลุดหน้าจอ
join-delay-ticks: 2
# watchdog: เปิด dialog ซ้ำทันทีหากถูกปิดหรือถูกขยับตัว (วินาที)
reopen-enabled: true
reopen-interval-seconds: 1
# บังคับปุ่ม keypad เป็นหลัก (ห้ามพิมพ์เอง -> ใช้ค่าจากปุ่มเท่านั้น)
keypad-authoritative: true
storage:
# YAML | SQLITE | MYSQL (ถ้าไดรเวอร์ไม่พร้อมจะ fallback YAML อัตโนมัติ ไม่พัง)
type: YAML
debug: false

