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

Java Hướng dẫn: Code Plugin Spigot Cơ Bản, Bằng intelji ideal

himoinguoine123

THÀNH VIÊN
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:
  • 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.
1. Chuẩn bị môi trường:
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
b. Cài đặt:
2. Tạo Project với Maven (IntelliJ) :
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;
  • JavaPluginlớ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.Command;
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ướcNội dung
1Cài JDK + IDE
2Tạo project Maven
3Viết code Main.java
4Viết plugin.yml
5Build ra .jar
6Copy plugin vào server
7Vào game test lệnh /hello




Tóm tắt:
Thành phầnMụ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
§aMà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ầnGiả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òngGiải thích
@OverrideGhi đè 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òngGiải thích
@OverrideGhi đè 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ầnGiải thích
@OverrideGhi đè 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 senderNgười thực hiện lệnh (console hoặc player).
Command cmdThông tin về lệnh được thực hiện (tên, alias...).
String labelTên lệnh gốc được sử dụng để gọi (/hello, /Hello, ...).
String[] argsCá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òngGiả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àmTác dụng
@OverrideGhi đè hàm có sẵn trong lớp cha.
getLogger().info(...)Ghi log vào console server.
§aKý 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!
 
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:
  • 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.
1. Chuẩn bị môi trường:
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
b. Cài đặt:
2. Tạo Project với Maven (IntelliJ) :
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;
  • JavaPluginlớ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.Command;
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ướcNội dung
1Cài JDK + IDE
2Tạo project Maven
3Viết code Main.java
4Viết plugin.yml
5Build ra .jar
6Copy plugin vào server
7Vào game test lệnh /hello




Tóm tắt:
Thành phầnMụ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
§aMà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ầnGiả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òngGiải thích
@OverrideGhi đè 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òngGiải thích
@OverrideGhi đè 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ầnGiải thích
@OverrideGhi đè 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 senderNgười thực hiện lệnh (console hoặc player).
Command cmdThông tin về lệnh được thực hiện (tên, alias...).
String labelTên lệnh gốc được sử dụng để gọi (/hello, /Hello, ...).
String[] argsCá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òngGiả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àmTác dụng
@OverrideGhi đè hàm có sẵn trong lớp cha.
getLogger().info(...)Ghi log vào console server.
§aKý 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!
nah bro công đức vô lượng quá nma hình như bro quên k nói là phải bt code Java để học nhanh hơn =))
 
Similar content Most view Xem thêm
Back
Top Bottom