๐ฅณ์ด๋ฒ ์๊ฐ์๋ ํ๋ ์ด์ด์ ์ขํ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ช ๋ น์ด๋ฅผ ๋ง๋ค์ด๋ณด์์!
โ์์ํ๊ธฐ ์ ์...
์ต๋ํ ์๋ฐ ์ด๊ธ์๋ ํ๋ฌ๊ทธ์ธ์ ๋ง๋ค ์ ์๋๋ก ์์ฑํ๊ณ ์์ต๋๋ค.
์ด๋ ค์ธ ์ ์๋ ๋ด์ฉ์ ๋๋ณด๊ธฐ ์์ ์ ์ด๋์์ผ๋ ์ฐธ๊ณ ํด์ฃผ์ธ์!
โจ๏ธ๋ช ๋ น์ด ๋ง๋ค๊ธฐ
1. ํด๋์ ํ์ผ ์์ฑํ๊ธฐ
์ด์ ๊น์ง์ ํด๋ ๊ตฌ์กฐ๋ ์๋์ ๊ฐ์๋ค.
์ฌ๊ธฐ์ ํด๋ ๐commands
์, ํด๋์ค ๐PosCommand
๋ฅผ ๋ง๋ค์ด์ค๋ค.
๊ทธ๋ผ ๋ค์๊ณผ ๊ฐ์ ํด๋์ค๊ฐ ์์ฑ๋ ๊ฒ์ด๋ค.
package com.tistory.localhost.tutorialplugin.commands;
public class PosCommand {
}
2. ๊ธฐ๋ณธ ํ ์์ฑํ๊ธฐ
์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ CommandExecuter
๋ฅผ ์์ ๋ฐ์์ผ ํ๋ค.CommandExecuter
๋ฅผ implements
ํํ๋ก ์์ ๋ฐ๊ธฐ ๋๋ฌธ์ CommandExecuter
์ธ์คํด์ค์ ์ ์๋ onCommand
๋ฉ์๋๋ฅผ ํ์๋ก ๊ตฌํ ํด์ค์ผ ํ๋ค.
๋ช ๋ น์ด๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํ ๊ธฐ๋ณธ์ ์ธ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
package com.tistory.localhost.tutorialplugin.commands;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
public class PosCommand implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
return false;
}
}
onCommand์ ๋งค๊ฐ๋ณ์์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ๋ค.
๋งค๊ฐ๋ณ์ | ๊ธฐ๋ฅ |
---|---|
CommandSender sender | ๋ช ๋ น์ด๋ฅผ ์คํํ ์ฌ๋ |
Command command | ์คํ๋ ๋ช ๋ น์ด |
String label | ์ฌ์ฉ๋ ๋ช ๋ น์ ๋ณ์นญ (๋ณ์นญ์ผ๋ก ์คํํ๋์ง ํ์ธํ ์ ์๋ค.) |
String[] args | ์ ๋ฌ๋ ๋ช ๋ น์ด ์ธ์ |
3. ๊ธฐ๋ฅ ์์ฑํ๊ธฐ
์ฐ๋ฆฌ๊ฐ ๋ง๋ค๊ฒ์ ํ๋ ์ด์ด์ ์ขํ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ช ๋ น์ด์ด๋ค.
๊ตฌํํด์ผ ํ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. ์ฝ์์์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค. (์ฝ์์ ์ขํ๊ฐ ์์ผ๋๊น...)
2. ํ๋ ์ด์ด์ ์ขํ๋ฅผ ๊ตฌํ๋ค.
3. ๊ตฌํ ์ขํ๋ฅผ ํ๋ ์ด์ด์๊ฒ ๋ณด๋ด์ค๋ค.
1. ์ฝ์์์ ์คํํ์ ๋ ์ฒ๋ฆฌํ๊ธฐ
if(!(sender instanceof Player)){ // ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ ์ฌ๋์ด ํ๋ ์ด์ด๊ฐ ์๋๋ผ๋ฉด
sender.sendMessage("์ด ๋ช
๋ น์ด๋ ์ฝ์์์ ์คํํ ์ ์์ต๋๋ค!"); // ๋ผ๊ณ ๋ณด๋ด๊ธฐ
return true; // ์ข
๋ฃ
}
false๋ฅผ returnํ๋ฉด plugin.yml์ ๋ฑ๋ก๋ ๋ช
๋ น์ด์ ์ฌ์ฉ๋ฒ์ ๋ฐํํ๋ค.
๋ฐ๋ผ์ ์ผ๋ฐ์ ์ผ๋ก๋ true๋ฅผ return ํด์ค์ผํ๋ค.
2. ํ๋ ์ด์ด ์ขํ ๊ตฌํ๊ธฐ
Player p = (Player) sender;
Location location = p.getLocation();
int x = location.getBlockX();
int y = location.getBlockY();
int z = location.getBlockZ();
3. ํ๋ ์ด์ด์๊ฒ ์ขํ๋ฅผ ๋ฉ์ธ์ง๋ก ๋ณด๋ด๊ธฐ
String msg = String.format("[ ์ขํ ] x : %d y : %d z : %d", x, y, z);
p.sendMessage(msg);
๐ช์ ์ฒด ์ฝ๋
package com.tistory.localhost.tutorialplugin.commands;
import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class PosCommand implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!(sender instanceof Player)) {
sender.sendMessage("์ด ๋ช
๋ น์ด๋ ์ฝ์์์ ์คํํ ์ ์์ต๋๋ค!");
return true;
}
Player p = (Player) sender;
Location location = p.getLocation();
int x = location.getBlockX();
int y = location.getBlockY();
int z = location.getBlockZ();
String msg = String.format("[ ์ขํ ] x : %d y : %d z : %d", x, y, z);
p.sendMessage(msg);
return true;
}
}
โ๋ช ๋ น์ด ๋ฑ๋กํ๊ธฐ
1. plugin.yml
์ ๋ฑ๋กํ๊ธฐ
plugin.yml
ํ์ผ์ ์๋์ ๊ฐ์ ๊ฒฝ๋ก์ ์๋ค.
ํด๋น ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ค๋ค.
commands:
pos:
usage: /<command>
description: ํ๋ ์ด์ด์ ์ขํ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
aliases:
- ์ขํ
ํค | ๊ฐ |
pos | ๋ช ๋ น์ด์ ์ด๋ฆ |
usage | ๋ช
๋ น์ด ์ฌ์ฉ๋ฒ. <command>๋ ๋ช
๋ น์ด ์ด๋ฆ์ผ๋ก ๋์ฒด๋๋ค. ๋ฐ๋ผ์, ์ฌ๊ธฐ์์๋ /pos๊ฐ ๋๋ค. |
description | ๋ช ๋ น์ด ์ค๋ช |
aliases | ๋ช ๋ น์ด ๋ณ์นญ ("/์ขํ" ๋ผ๊ณ ์คํํด๋ ๋๊ฐ์ด ์คํ๋๋ค.) |
๐ช์ ์ฒด ์ฝ๋
name: Tutorialplugin
version: '${version}'
main: com.tistory.localhost.tutorialplugin.Tutorialplugin
api-version: 1.19
description: this is a tutorial plugin
commands:
pos:
usage: /<command>
description: ํ๋ ์ด์ด์ ์ขํ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
aliases:
- ์ขํ
2. onEnable()
์ ๋ฑ๋กํ๊ธฐ
1ํธ์์ ๋ฐฐ์ด onEnable()์ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ค๋ค.
getCommand("pos").setExecutor(new PosCommand());
"pos"๋ ๋ช ๋ น์ด ์ด๋ฆ์ด๊ณ , PosCommand()๋ ํด๋น ๋ช ๋ น์ด๋ฅผ ๊ตฌํํด๋์ ํด๋์ค๋ค.
๐ช์ ์ฒด ์ฝ๋
package com.tistory.localhost.tutorialplugin;
import com.tistory.localhost.tutorialplugin.commands.PosCommand;
import org.bukkit.plugin.java.JavaPlugin;
public final class Tutorialplugin extends JavaPlugin {
@Override
public void onEnable() {
// Plugin startup logic
getLogger().info("ํ๋ฌ๊ทธ์ธ ๋ก๋ฉ๋จ.");
getCommand("pos").setExecutor(new PosCommand());
}
@Override
public void onDisable() {
// Plugin shutdown logic
getLogger().info("ํ๋ฌ๊ทธ์ธ ์ข
๋ฃ๋จ.");
}
}