- Tham gia
- 05/01/2025
- Bài viết
- 14
Dưới đây là bài hướng dẫn chi tiết các bước và cách code plugin Spigot cơ bản dành cho người mới bắt đầu phát triển plugin Minecraft bằng Java. Bài này sẽ giúp bạn:
a. Yêu cầu:
Cấu trúc Maven pom.xml:
<project xmlns="maven.apache.org" ...>
<modelVersion>4.0.0</modelVersion>
<groupId>com.yourname</groupId>
<artifactId>MyFirstPlugin</artifactId>
<version>1.0</version>
<name>MyFirstPlugin</name>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.20.1-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>spigot-repo</id>
<url>hub.spigotmc.org</url>
</repository>
</repositories>
</project>
3. Viết Plugin Đầu Tiên:
File chính Main.java:
package com.yourname.myfirstplugin;
- **`package`** là tên gói (namespace) chứa class.
- Giúp tránh trùng lặp với các plugin hoặc thư viện khác.
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.command.CommandSender;
- Dùng để xử lý **lệnh trong game**.
- `CommandSender`: đại diện cho người gọi lệnh (người chơi, console...).
- `Command`: chứa thông tin về lệnh được gọi.
public class Main extends JavaPlugin {
Các hàm quan trọng:
onEnable():
@Override
public void onEnable() {
getLogger().info("Plugin đã được bật!");
}
onDisable():
@Override
public void onDisable() {
getLogger().info("Plugin đã tắt.");
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { -> Xử lý lệnh /hello
if (cmd.getName().equalsIgnoreCase("hello")) { -> Kiểm tra lệnh và trả lời:
sender.sendMessage("§aXin chào từ plugin Spigot đầu tiên của bạn!");
return true;
}
return false; -> Nếu không phải lệnh /hello
}
}
4: plugin.yml:
resources/plugin.yml với nội dung phù cho dòng code trên như sau:
name: MyFirstPlugin -> Tên của plugin của bạn muốn đặt.
version: 1.0 -> Phiên bản hiện tại của plugins
main: com.yourname.myfirstplugin.Main -> Đường dẫn tới Main.java
api-version: 1.20 -> Phiên bản hỗ trợ của plugin của bạn.
commands: -> Nơi chứa các lệnh bạn code, nếu không có trong đây thì lệnh sẽ không thể dùng được dù đã code.
hello: -> Lệnh /hello mà ta vừa code ở trên.
description: Gửi lời chào -> Miêu tả tác dụng của lệnh.
usage: /hello -> Cách sử dụng hay lệnh để kích hoạt lệnh này.
5. Build plugin .jar:
Tại IntelliJ hoặc dòng lệnh này rồi enter:
mvn clean package
File plugin sẽ nằm trong:
target/MyFirstPlugin-1.0.jar
6. Cài plugin vào Minecraft server:
7. Thử plugin trong game:
Vào server Minecraft, chạy lệnh:
/hello
Bạn sẽ thấy dòng chào màu xanh lá cây!
Tổng kết:
Tóm tắt:
Bảng giải thích chi tiết các thành phần trong Main.java:
onEnable():
onDisable():
onCommand(...):
Kiểm tra và xử lý lệnh:
Tổng quan các ký hiệu đặc biệt:
Tóm gọn luồng hoạt động:
Bài viết đến đây là hết, cảm ơn mọi người vì đã xem, nếu thấy hay mọi có thể nhắn dưới phần bình luận và đưa ra các câu hỏi chưa hiểu, mình sẽ giải đáp thắc mắc cho các bạn, sau bài học này, mình mong các bạn sẽ hiểu biết hơn về code cũng như java spigot hơn, cảm ơn!
- Biết cách cài đặt môi trường phát triển.
- Tạo plugin Spigot đầu tiên.
- Viết một lệnh đơn giản trong plugin.
- Build file .jar và chạy trên server.
a. Yêu cầu:
- Java JDK 17 hoặc mới hơn (Spigot 1.20+ yêu cầu Java 17)
- IDE (khuyên dùng IntelliJ IDEA hoặc Eclipse)
- Maven hoặc Gradle (để quản lý project)
- Spigot hoặc Paper server
- Tải và cài Java: www.oracle.com
- IDE: www.jetbrains.com
- Dùng BuildTools để build Spigot API (nếu không dùng Paper)
Cấu trúc Maven pom.xml:
<project xmlns="maven.apache.org" ...>
<modelVersion>4.0.0</modelVersion>
<groupId>com.yourname</groupId>
<artifactId>MyFirstPlugin</artifactId>
<version>1.0</version>
<name>MyFirstPlugin</name>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.20.1-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>spigot-repo</id>
<url>hub.spigotmc.org</url>
</repository>
</repositories>
</project>
3. Viết Plugin Đầu Tiên:
File chính Main.java:
package com.yourname.myfirstplugin;
- **`package`** là tên gói (namespace) chứa class.
- Giúp tránh trùng lặp với các plugin hoặc thư viện khác.
import org.bukkit.plugin.java.JavaPlugin;
- JavaPlugin là lớp cha (superclass) cơ bản nhất cho tất cả plugin Spigot.
- Nó cung cấp các phương thức như onEnable(), onDisable(), v.v.
import org.bukkit.command.CommandSender;
- Dùng để xử lý **lệnh trong game**.
- `CommandSender`: đại diện cho người gọi lệnh (người chơi, console...).
- `Command`: chứa thông tin về lệnh được gọi.
public class Main extends JavaPlugin {
- Tạo một class chính tên là Main, kế thừa từ JavaPlugin.
- Lớp này là trung tâm quản lý plugin.
Các hàm quan trọng:
onEnable():
- Được gọi khi plugin được bật lên (khi server khởi động).
- Dùng để: đăng ký lệnh, load dữ liệu, khởi tạo...
- getLogger().info(...): ghi log ra console server.
@Override
public void onEnable() {
getLogger().info("Plugin đã được bật!");
}
onDisable():
- Được gọi khi plugin bị tắt (tắt server hoặc reload).
- Dùng để: lưu dữ liệu, hủy đăng ký sự kiện, dọn dẹp tài nguyên.
@Override
public void onDisable() {
getLogger().info("Plugin đã tắt.");
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { -> Xử lý lệnh /hello
- Hàm xử lý khi có lệnh được gọi.
- Tham số:
- sender: người gọi (có thể là người chơi hoặc console).
- cmd: đối tượng chứa tên và thông tin lệnh.
- label: tên lệnh được gọi.
- args: mảng các đối số sau tên lệnh (nếu có).
if (cmd.getName().equalsIgnoreCase("hello")) { -> Kiểm tra lệnh và trả lời:
- Kiểm tra xem người chơi có gõ /hello hay không.
- equalsIgnoreCase(...): so sánh không phân biệt chữ hoa/thường.
- §a: mã màu xanh lá cây trong Minecraft.
- sender.sendMessage(...): gửi tin nhắn đến người gọi lệnh.
- return true: thông báo rằng lệnh đã được xử lý thành công.
sender.sendMessage("§aXin chào từ plugin Spigot đầu tiên của bạn!");
return true;
}
return false; -> Nếu không phải lệnh /hello
}
}
4: plugin.yml:
resources/plugin.yml với nội dung phù cho dòng code trên như sau:
name: MyFirstPlugin -> Tên của plugin của bạn muốn đặt.
version: 1.0 -> Phiên bản hiện tại của plugins
main: com.yourname.myfirstplugin.Main -> Đường dẫn tới Main.java
api-version: 1.20 -> Phiên bản hỗ trợ của plugin của bạn.
commands: -> Nơi chứa các lệnh bạn code, nếu không có trong đây thì lệnh sẽ không thể dùng được dù đã code.
hello: -> Lệnh /hello mà ta vừa code ở trên.
description: Gửi lời chào -> Miêu tả tác dụng của lệnh.
usage: /hello -> Cách sử dụng hay lệnh để kích hoạt lệnh này.
5. Build plugin .jar:
Tại IntelliJ hoặc dòng lệnh này rồi enter:
mvn clean package
File plugin sẽ nằm trong:
target/MyFirstPlugin-1.0.jar
6. Cài plugin vào Minecraft server:
- Copy file .jar vào thư mục plugins của server Spigot/Paper.
- Chạy server, nếu thành công bạn sẽ thấy dòng Plugin đã được bật!.
7. Thử plugin trong game:
Vào server Minecraft, chạy lệnh:
/hello
Bạn sẽ thấy dòng chào màu xanh lá cây!
Tổng kết:
| Bước | Nội dung |
|---|---|
| 1 | Cài JDK + IDE |
| 2 | Tạo project Maven |
| 3 | Viết code Main.java |
| 4 | Viết plugin.yml |
| 5 | Build ra .jar |
| 6 | Copy plugin vào server |
| 7 | Vào game test lệnh /hello |
Tóm tắt:
| Thành phần | Mục đích |
|---|---|
| onEnable() | Chạy khi plugin bật, dùng để khởi tạo |
| onDisable() | Chạy khi plugin tắt, dùng để dọn dẹp |
| onCommand(...) | Xử lý lệnh do người chơi hoặc console gọi |
| getLogger().info(...) | Ghi log thông tin ra console |
| sender.sendMessage(...) | Gửi tin nhắn đến người dùng gọi lệnh |
| §a | Màu xanh lá trong Minecraft |
Bảng giải thích chi tiết các thành phần trong Main.java:
| Dòng / Thành phần | Giải thích chi tiết |
|---|---|
| package com.yourname.myfirstplugin; | Khai báo package (gói) cho class Java. Giúp tổ chức mã nguồn và tránh trùng tên với plugin khác. |
| import org.bukkit.plugin.java.JavaPlugin; | Import lớp JavaPlugin, lớp cha bắt buộc của mọi plugin Spigot. Cung cấp các phương thức như onEnable, onDisable, v.v. |
| import org.bukkit.command.Command; | Import lớp đại diện cho một lệnh đã được định nghĩa trong plugin.yml. |
| import org.bukkit.command.CommandSender; | Import lớp đại diện cho người thực thi lệnh (người chơi, console, command block...). |
| public class Main extends JavaPlugin { | Khai báo class chính của plugin. Tên Main là tùy ý, nhưng phải trùng với tên được khai báo trong plugin.yml. extends JavaPlugin để Spigot nhận diện là plugin. |
onEnable():
| Dòng | Giải thích |
|---|---|
| @Override | Ghi đè phương thức có sẵn trong lớp cha JavaPlugin. |
| public void onEnable() { | Phương thức được gọi khi plugin được bật (khi server khởi động hoặc reload). |
| getLogger().info("Plugin đã được bật!"); | Gửi dòng log màu vàng vào console server, hiển thị thông báo khởi động. |
onDisable():
| Dòng | Giải thích |
|---|---|
| @Override | Ghi đè phương thức của lớp cha JavaPlugin. |
| public void onDisable() { | Được gọi khi plugin bị tắt (server dừng hoặc reload plugin). |
| getLogger().info("Plugin đã tắt."); | Gửi log ra console khi plugin bị tắt. |
onCommand(...):
| Dòng / Thành phần | Giải thích |
|---|---|
| @Override | Ghi đè phương thức xử lý lệnh trong JavaPlugin. |
| public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) | Xử lý khi người chơi hoặc console thực hiện một lệnh được khai báo trong plugin.yml. |
| CommandSender sender | Người thực hiện lệnh (console hoặc player). |
| Command cmd | Thông tin về lệnh được thực hiện (tên, alias...). |
| String label | Tên lệnh gốc được sử dụng để gọi (/hello, /Hello, ...). |
| String[] args | Các tham số đi kèm với lệnh, ví dụ /hello Luna → args[0] = "Luna". |
Kiểm tra và xử lý lệnh:
| Dòng | Giải thích |
|---|---|
| if (cmd.getName().equalsIgnoreCase("hello")) { | Kiểm tra xem lệnh được gọi có phải "hello" không, không phân biệt hoa thường. |
| sender.sendMessage("§aXin chào từ plugin Spigot đầu tiên của bạn!"); | Gửi tin nhắn màu xanh lá cây (§a) tới người gửi lệnh. |
| return true; | Trả về true nghĩa là plugin đã xử lý lệnh thành công. |
| return false; | Nếu không phải lệnh "hello", trả về false để Spigot xử lý bằng mặc định hoặc báo lỗi lệnh không tồn tại. |
Tổng quan các ký hiệu đặc biệt:
| Ký hiệu / Hàm | Tác dụng |
|---|---|
| @Override | Ghi đè hàm có sẵn trong lớp cha. |
| getLogger().info(...) | Ghi log vào console server. |
| §a | Ký hiệu dùng để tạo màu trong Minecraft (màu xanh lá cây). |
| sender.sendMessage(...) | Gửi tin nhắn đến người dùng hoặc console gọi lệnh. |
Tóm gọn luồng hoạt động:
- Plugin bật lên → onEnable() chạy → hiển thị dòng log "Plugin đã được bật!".
- Người chơi dùng lệnh /hello → onCommand(...) chạy → kiểm tra tên lệnh → gửi tin nhắn chào.
- Plugin tắt đi → onDisable() chạy → hiển thị dòng log "Plugin đã tắt.".
Bài viết đến đây là hết, cảm ơn mọi người vì đã xem, nếu thấy hay mọi có thể nhắn dưới phần bình luận và đưa ra các câu hỏi chưa hiểu, mình sẽ giải đáp thắc mắc cho các bạn, sau bài học này, mình mong các bạn sẽ hiểu biết hơn về code cũng như java spigot hơn, cảm ơn!




