アドベントカレンダー?
学校の友人から聞いて、初参加
かと言って、そこまで技術系の知識がない...
というわけで、私が約3~5年くらい向き合ってきた「Minecraftのサーバー開発」について綴ろうと思案。
※この記事の対象はJava版です
Minecraftサーバー構築しよう!
この記事を開いた皆様であれば、自宅サーバーの1つや2つお持ちでしょう。
...持ってなかったとしても、普通のパソコンで容易にできるので悪しからず。
Minecraftサーバーは、そもそも公式からjarファイルが配布されています。
https://www.minecraft.net/ja-jp/download/server
古いバージョンが欲しい場合は、こちら。
https://mcversions.net/
そして、ダウンロードしたjarファイルを適当なディレクトリに配置して、
java -Xmx1024M -Xms1024M -jar {ファイル名}.jar nogui
なんて打てば、解放完了!おしまい!
躓きポイント : ポート開放
なんですか、これ。
無邪気にMinecraftサーバーでマルチプレイがしたい子供の前に立ちはだかる難関。
普通にネットワークの知識を要求してきます。
私はルーターからポート開放しており、ルーターが使えなくなっても私の別の記事の方法を使いました。
ただ今回、ポート開放の話までしていると無限に長くなってしまうので割愛。ごめんなさい。
Pluginサーバーを導入しよう!
Java版のMinecraftを少しかじったことがある人が、マルチプレイでなにか遊ぼうと思った時、先ず当然データパックが思いつきます。
現に、AdoventCalendar2025も「Minecraft Command」ならカレンダーがあるのに「Plugin」や「MOD」がないんですよ。
そして何より、公式から与えられし合法的なゲーム制作ができるのが、コマンドそしてデータパック。
その中でPluginは、MODほどの拡張性も人気もなく、かと言ってコマンド程手軽に導入もできない...
不憫ですね
しかし、バニラのユーザーを一番楽しく遊ばせられることのできるのが、このPluginです。
MODのように全員への導入の矯正もしない、データパックのようにコマンドに縛られない。
そして、そのPluginServerを提供してくれているのが、Spigot、ならびにPaperMCです。
先程、Minecraft公式のjarファイルを紹介しました。
このjarファイルを!今すぐ!Paperに置き換えましょう!
これだけで、快適性と拡張性がグッと上がります。
ちなみに、置き換えるだけで良いです。これでもう導入は終わりです。
Pluginを入れよう!
SpigotやPaperでサーバーを立てると、/pluginsのフォルダが入れられます。
この中に、Javaで書いたコードを入れることができます。
(一応、Kotlinでも書けるみたい...?)
便利なことに、有志の人達が作ってくれたPluginが沢山あるので、それを導入してみましょう。
Minecraft Plugin 配布何かで調べればごまんと出てくるでしょう。
ここ(Paper hangar)とか、ここ(Spigot)とか。
ここ(Github)にもソースコードとともに直で配布されてる方も居ますね。
そしてもちろん私も、Paper hungarとGithubで書いたPluginを配布しています
そして、plugin.jarを/pluginに入れたら後は同じ手順で起動するだけ。
なんと簡単!なんと感嘆!
Pluginを作ろう!
大抵、minecraft plugin 作り方で調べれば、「IntelliJ IDEA」を導入して「Minecraft Development」を入れればいいよ!と書いてあります。
正解です。私もそうしてます。
そこでプロジェクトを作ると、
public final class LoginBonusPlugin extends JavaPlugin{
@Override
public void onEnable() {
}
@Override
public void onDisable() {
}
}
...と、出てきます。
-
onEnable()が、Minecraftサーバー起動時に行われる処理 -
onDisable()が、Minecraftサーバー起動時に行われる処理
私はScratchをあまり触ったことがないのですが、onEnable()を例えるとするなら"旗が押された時"でしょう。
そして、サーバーでしたい大抵のことはこれを使うでしょう。
@EventHandler
これを使って、例えば
public final class LoginBonusPlugin extends JavaPlugin implements Listener {
@Override
public void onEnable() {
Bukkit.getServer().getPluginManager().registerEvents(new main(), this);
}
@Override
public void onDisable() {
}
@EventHandler
// イベント検知を設定(今回はスニーク)
public void onToggleSneakEvent(PlayerToggleSneakEvent e){
// そのイベントを行ったプレイヤーをpに代入
Player p = e.getPlayer();
//もし (プレイヤーがスニーク状態になる) && (プレイヤーが手にコンパスを持っていた場合)
if(p.isSneaking() && p.getInventory().getItemInMainHand().equals(new ItemStack(Material.COMPASS))){
//プレイヤーを現世の100,60,100の座標へ飛ばす
p.teleport(new Location(Bukkit.getWorld("World"), 100, 60, 100, 0 ,0));
}
}
}
わかりやすいですね。
例えばサーバーにいるプレイヤーがコンパスを持ってしゃがむと、設定した座標に戻ることができる。というシチュエーションでしょうか。
Hypixelなどの有名なサーバーに一度入ったことがあれば、想像に易いかもしれません。
しかも、データパックと違って、右クリックや左クリック、インベントリ全般の操作をEventで取得して操作することができるので、とても楽しいです。
終わり
皆さんも、この記事を読んでMinecraftのサーバーを構築し、Pluginを入れて見てはいかがでしょうか。
これはゲームであって遊びでもある。勉強ではないし実りも少ない。
だが楽しいのでこれで良い