• Chào bạn, hãy đăng ký hoặc đăng nhập để tham gia cùng bọn mình và sử dụng được đầy đủ chức năng của diễn đàn :).
ToWarsDz

Hỏi về code plugin Ai biết code thì vào!

Trạng thái
Không mở trả lời sau này.

ToWarsDz

DEVELOPER
THÀNH VIÊN
Tham gia
10/12/2017
Bài viết
115
Fix giúp
Lổi:pastebin.com

Mã:
@EventHandler
    public void onPlayerPlace(BlockPlaceEvent e) {
        if(e.isCancelled()) {
            return;
        }
        List<String> meta = e.getItemInHand().getItemMeta().getLore();
        for (String i : meta) {
            if(i.toLowerCase().contains("vật phẩm này không thể đặt")) {
                e.setCancelled(true);
            }
        }
    }
}
Hoặc có plugin nào mà có lore:blabla thì item đó sẽ không đặt được xuống đất
cho xin luôn chứ code mệt =))
 
Đọc hết để bổ sung kiến thức

Hầu hết các thanh niên code hiện nay đều mắc 1 lỗi vô cùng đơn giản là getItemMeta nhưng không check null, Item mà không có tên (tên mặc định của minecraft), không lore, không enchant thì khi getItemMeta 100% sẽ get null, tức là không có ItemMeta.

Giải pháp:

+ Đầu tiên khai var ItemStack, sau đó check ItemStack không có ItemMeta thì return
Mã:
ItemStack i = e.getItemInHand();
if (!i.hasItemMeta()) return;

+ Sau khi đã vượt khỏi bài kiểm tra có ItemMeta rồi (có 1 trong 3 thứ: tên item, lore, enchant) thì kiểm tra tiếp ItemMeta có lore hay không, không có thì return
Mã:
ItemMeta im = i.getItemMeta();
if (!im.hasLore()) return;

+ Vượt được bài kiểm tra lore, thì đến lúc kiểm tra yêu cầu cuối cùng:
+ Có 2 kiểu kiểm tra lore ở đây, loại 1 là trong dòng lore có chữ "abc", loại 2 là dòng lore là "abc" (phân biệt contains (1) và equals (2) cho rõ), theo như thấy ở #1 thì
code nên chạy kiểu 2

Tối ưu:
+ Loại 1 lag hơn vì phải kiểm tra từng dòng lore, ít không ít nhưng nếu chạy 100, 200, 500 cái cùng lúc thì có thể gây lag tps
+ Loại 2 KHÔNG LAG

Dễ nhận dạng:
+ Loại 1 dễ nhận dạng hơn vì có var riêng 1 dòng lore rồi, có thể toLowerCase (chữ in hoa -> thường), stripColor (xóa hết code màu), ..., dễ trùng với kết quả kiểm tra hơn
VD: Đi học thằng anh sinh đôi bảo thằng em điểm danh hộ, ông thầy thấy giống thằng anh nên cho qua.

+ Loại 2 khó nhận dạng hơn, bắt buộc lore cần kiểm tra phải GIỐNG HOÀN TOÀN lore trong list
VD: Đăng nhập tài khoản, yêu cầu mật khẩu mà bạn nhập phải GIỐNG HOÀN TOÀN mật khẩu đã đăng ký

Mã:
List<String lorelist = im.getLore();

if (lorelist.contains(<Dòng lore chính xác từng chi tiết io>)) {
   e.setCancelled(true);
}



Bổ sung thêm:

thêm (ignoreCancelled=true) ở phía sau @EventHandler thì nó sẽ tự động return nếu event bị cancel (không catch event bị cancel)

Mã:
@EventHandler(ignoreCancelled=true)


Code giống như đi thi vậy, không làm bài thi ai cho đậu ?
 
Đọc hết để bổ sung kiến thức

Hầu hết các thanh niên code hiện nay đều mắc 1 lỗi vô cùng đơn giản là getItemMeta nhưng không check null, Item mà không có tên (tên mặc định của minecraft), không lore, không enchant thì khi getItemMeta 100% sẽ get null, tức là không có ItemMeta.

Giải pháp:

+ Đầu tiên khai var ItemStack, sau đó check ItemStack không có ItemMeta thì return
Mã:
ItemStack i = e.getItemInHand();
if (!i.hasItemMeta()) return;

+ Sau khi đã vượt khỏi bài kiểm tra có ItemMeta rồi (có 1 trong 3 thứ: tên item, lore, enchant) thì kiểm tra tiếp ItemMeta có lore hay không, không có thì return
Mã:
ItemMeta im = i.getItemMeta();
if (!im.hasLore()) return;

+ Vượt được bài kiểm tra lore, thì đến lúc kiểm tra yêu cầu cuối cùng:
+ Có 2 kiểu kiểm tra lore ở đây, loại 1 là trong dòng lore có chữ "abc", loại 2 là dòng lore là "abc" (phân biệt contains (1) và equals (2) cho rõ), theo như thấy ở #1 thì
code nên chạy kiểu 2

Tối ưu:
+ Loại 1 lag hơn vì phải kiểm tra từng dòng lore, ít không ít nhưng nếu chạy 100, 200, 500 cái cùng lúc thì có thể gây lag tps
+ Loại 2 KHÔNG LAG

Dễ nhận dạng:
+ Loại 1 dễ nhận dạng hơn vì có var riêng 1 dòng lore rồi, có thể toLowerCase (chữ in hoa -> thường), stripColor (xóa hết code màu), ..., dễ trùng với kết quả kiểm tra hơn
VD: Đi học thằng anh sinh đôi bảo thằng em điểm danh hộ, ông thầy thấy giống thằng anh nên cho qua.

+ Loại 2 khó nhận dạng hơn, bắt buộc lore cần kiểm tra phải GIỐNG HOÀN TOÀN lore trong list
VD: Đăng nhập tài khoản, yêu cầu mật khẩu mà bạn nhập phải GIỐNG HOÀN TOÀN mật khẩu đã đăng ký

Mã:
List<String lorelist = im.getLore();

if (lorelist.contains(<Dòng lore chính xác từng chi tiết io>)) {
   e.setCancelled(true);
}



Bổ sung thêm:

thêm (ignoreCancelled=true) ở phía sau @EventHandler thì nó sẽ tự động return nếu event bị cancel (không catch event bị cancel)

Mã:
@EventHandler(ignoreCancelled=true)


Code giống như đi thi vậy, không làm bài thi ai cho đậu ?
để thi thử =))
*****Nội dung được bổ sung thêm*****
Đọc hết để bổ sung kiến thức

Hầu hết các thanh niên code hiện nay đều mắc 1 lỗi vô cùng đơn giản là getItemMeta nhưng không check null, Item mà không có tên (tên mặc định của minecraft), không lore, không enchant thì khi getItemMeta 100% sẽ get null, tức là không có ItemMeta.

Giải pháp:

+ Đầu tiên khai var ItemStack, sau đó check ItemStack không có ItemMeta thì return
Mã:
ItemStack i = e.getItemInHand();
if (!i.hasItemMeta()) return;

+ Sau khi đã vượt khỏi bài kiểm tra có ItemMeta rồi (có 1 trong 3 thứ: tên item, lore, enchant) thì kiểm tra tiếp ItemMeta có lore hay không, không có thì return
Mã:
ItemMeta im = i.getItemMeta();
if (!im.hasLore()) return;

+ Vượt được bài kiểm tra lore, thì đến lúc kiểm tra yêu cầu cuối cùng:
+ Có 2 kiểu kiểm tra lore ở đây, loại 1 là trong dòng lore có chữ "abc", loại 2 là dòng lore là "abc" (phân biệt contains (1) và equals (2) cho rõ), theo như thấy ở #1 thì
code nên chạy kiểu 2

Tối ưu:
+ Loại 1 lag hơn vì phải kiểm tra từng dòng lore, ít không ít nhưng nếu chạy 100, 200, 500 cái cùng lúc thì có thể gây lag tps
+ Loại 2 KHÔNG LAG

Dễ nhận dạng:
+ Loại 1 dễ nhận dạng hơn vì có var riêng 1 dòng lore rồi, có thể toLowerCase (chữ in hoa -> thường), stripColor (xóa hết code màu), ..., dễ trùng với kết quả kiểm tra hơn
VD: Đi học thằng anh sinh đôi bảo thằng em điểm danh hộ, ông thầy thấy giống thằng anh nên cho qua.

+ Loại 2 khó nhận dạng hơn, bắt buộc lore cần kiểm tra phải GIỐNG HOÀN TOÀN lore trong list
VD: Đăng nhập tài khoản, yêu cầu mật khẩu mà bạn nhập phải GIỐNG HOÀN TOÀN mật khẩu đã đăng ký

Mã:
List<String lorelist = im.getLore();

if (lorelist.contains(<Dòng lore chính xác từng chi tiết io>)) {
   e.setCancelled(true);
}



Bổ sung thêm:

thêm (ignoreCancelled=true) ở phía sau @EventHandler thì nó sẽ tự động return nếu event bị cancel (không catch event bị cancel)

Mã:
@EventHandler(ignoreCancelled=true)


Code giống như đi thi vậy, không làm bài thi ai cho đậu ?
cảm ơn làm được rồi để đọc lại để hiểu sâu luôn
 
Trạng thái
Không mở trả lời sau này.
Similar content Most view Xem thêm
Back
Top Bottom