• 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 :).
nahkd123

Bukkit Hướng dẫn tạo GUI

nahkd123

DEVELOPER
THÀNH VIÊN
Tham gia
21/01/2018
Bài viết
728
Thật ra cái này đơn giản lắm, nhưng mình sẽ hướng dẫn cách làm GUI cho mấy bạn ko biết uwu

1. Tạo GUI
Inventory là nơi để chứa đồ, thông thường nó sẽ là chest GUI, nhưng bạn cũng có thể sử dụng Crafting Table, Anvil, Horse, v.v
Ở đây chúng ta sẽ tạo một cái chest GUI:
Java:
Bukkit.createInventory(null, kichthuoc, "Tiêu đề");
// Vì chúng ta không cần dự trữ vật phẩm nên chúng ta để tham số thứ nhất là null
// Kích thước ở đây phải là một số nguyên chia hết cho 9. VD: 9 / 9 = 1
// Tham số thứ 3 là tiêu đề của GUI
Nó sẽ trả về [B]org.bukkit.inventory.Inventory[/B]. Trong ví dụ này. chúng ta sẽ tạo một GUI để hiện thông tin người chơi:
Java:
Inventory inv = Bukkit.createInventory(null, 9, "Thông tin của bạn");

2. Thêm vật phẩm vào GUI
Trong class Inventory, chúng ta có 2 loại:
Java:
Inventory#setItem(slot, item);
Inventory#addItem(item);
- setItem là cái được thường xuyên sử dụng để tạo GUI. Tham số thứ nhất là vị trí của item bắt đầu từ số 0, tham số thứ hai là ItemStack.
- addItem tương tự với setItem, nhưng thay vì chúng ta chọn vị trí cho nó, chúng ta sẽ thêm nó vào ô mới hoặc một ô có item giống hệt nhau.

Chúng ta sẽ tạo một item để hiện tên người chơi:
Java:
ItemStack item = new ItemStack(Material.DIRT);
ItemMeta meta = item.getItemMeta();
meta.setLocalizedName("§bXin chào " + player.getName()); // player ở đây là người chơi
ArrayList<String> lore = new ArrayList<String>();
lore.add("§bur mom gey already");
lore.add("§8lel");
meta.setLore(lore);
item.setItemMeta(meta);

// Thêm item vào GUI (ô thứ 5)
inv.setItem(4, item);

3. Mở GUI
Đây là bước cuối cùng để mở GUI. Nó khá đơn giản, chỉ cần gọi Player#openInventory(Inventory) là được:
Java:
player.openInventory(inv);

4. Kiểm tra khi người chơi bấm vào một item nào đó (Event listener)
Ok, đây là bước để kiểm tra nếu người chơi bấm vào GUI mà bạn vừa tạo. Loại event này có tên là InventoryClickEvent:
Java:
@EventHandler
public void onClick(InventoryClickEvent event) {
    // Code
}
Cái đầu tiên chúng ta muốn kiểm tra là khi người chơi đang mở cái inventory mà bạn vừa tạo. Ở đây chúng ta sẽ kiểm tra tiêu đề của nó:
Java:
if (event.getInventory().getTitle().equals("Thông tin của bạn")) {
    // Code
}
Nếu đúng, chúng ta sẽ không cho người chơi lấy item đó ra khỏi cái GUI của bạn bằng cách cancel nó đi:
Java:
event.setCanceled(true);
Tiếp đến chúng ta sẽ cần phải kiểm tra nếu item mà bạn bấm vào có phải là item mà bạn đang cần tìm hay không:
Java:
ìf (event.getCurrentItem() != null && event.getCurrentItem().iSimmilar(item2)) {
    // Code
}
Sở dĩ mình dùng isSimmilar mà không phải là equals là vì cả 2 ItemStack không phải lúc nào cũng giống nhau 100%. Chúng ta chỉ cần nó giống lore các thứ là được rồi.
Lưu ý: item2 phải có meta giống nhau, nếu khác nhau sẽ không hoạt động.
Sau đó, bạn có thể làm những gì bạn muốn sau khi bấm vào item đó.

Thay vì tạo một ItemStack mới để kiểm tra, tại sao bạn lại không bỏ item vào static field nhỉ???
Java:
public static ItemStack item;
static {
    item = new ItemStack(Material.PAPER);
    // ...
}

// Inventory
inv.setItem(4, item);

// Event handler
if (event.getCurrentItem() != null && event.getCurrentItem().isSimmilar(TênClass.item)) {
    // Code here
}
 
Similar content Most view Xem thêm
Back
Top Bottom