• Trong thời gian này, bạn không thể tạo bài mới, đăng comment, hay tạo tài nguyên mới để diễn đàn dọn dẹp nội dung.
    Diễn đàn sẽ sớm mở trở lại, chi tiết hãy theo dõi tại Discord
ToWarsDz

Hỏi đáp Ai biết code thì vào!

  • Người tạo chủ đề Người tạo chủ đề ToWarsDz
  • Ngày gửi Ngày gửi
Trạng thái
Không mở trả lời sau này.

ToWarsDz

DEVELOPER
Fix giúp
Lổi:https://pastebin.com/Q4pbLtyi

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.
Nội dung tương tự Xem nhiều nhất Xem thêm

Thống kê nội dung

Tạo
ToWarsDz,
Trả lời lần cuối từ
ToWarsDz,
Trả lời
2
Lượt xem
560
Quay lại
Trên cùng