<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Spigot - よゆうで紅房</title>
	<atom:link href="https://yoyude.com/tag/spigot/feed/" rel="self" type="application/rss+xml" />
	<link>https://yoyude.com</link>
	<description>解説と解脱。なんだかにている</description>
	<lastBuildDate>Mon, 05 Sep 2022 10:58:58 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.2</generator>

<image>
	<url>https://yoyude.com/wp-content/uploads/2023/11/cropped-咲夜の紅房-32x32.jpg</url>
	<title>Spigot - よゆうで紅房</title>
	<link>https://yoyude.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/><atom:link rel="hub" href="https://websubhub.com/hub"/>	<item>
		<title>Spigotでアイテムをクリックしたら保存した座標にテレポートするPluginを作る【CheckPointIII/Minecraft】</title>
		<link>https://yoyude.com/clickspawn/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=clickspawn</link>
		
		<dc:creator><![CDATA[よゆう]]></dc:creator>
		<pubDate>Mon, 05 Sep 2022 10:58:33 +0000</pubDate>
				<category><![CDATA[記事一覧]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Spigot]]></category>
		<guid isPermaLink="false">https://yoyude.com/?p=763</guid>

					<description><![CDATA[<p>どうも。へっぽこプラグイン作成者のよゆうです。前回の記事を見てない方はそちらを先に御覧ください Spigotで看板をクリックした時に自分の座標を保存するPluginを作る【CheckPoint編II/Minecraft】 [&#8230;]</p>
<p>The post <a href="https://yoyude.com/clickspawn/">Spigotでアイテムをクリックしたら保存した座標にテレポートするPluginを作る【CheckPointIII/Minecraft】</a> first appeared on <a href="https://yoyude.com">よゆうで紅房</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>どうも。へっぽこプラグイン作成者のよゆうです。<br>前回の記事を見てない方はそちらを先に御覧ください</p>



<p><a href="https://yoyude.com/spigot-save/">Spigotで看板をクリックした時に自分の座標を保存するPluginを作る【CheckPoint編II/Minecraft】</a></p>



<p>初回の記事からはこちら</p>



<p><a href="https://yoyude.com/spigot-autosign/">Spigotで自動で記入済みの看板を設置するPluginを作る【CheckPoint編I/Minecraft】</a></p>



<p>というわけでチェックポイント編第三回。今回はアイテムをクリックすると保存したチェックポイントにテレポートする機能を追加していこうと思う。どうぞよしなに。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">実際に書いてみる</a><ol><li><a href="#toc2" tabindex="0">1.新しいクラス「ClickSpawn」の作成</a></li><li><a href="#toc3" tabindex="0">2.イベントの設定</a></li><li><a href="#toc4" tabindex="0">3.必要な変数を取得</a></li><li><a href="#toc5" tabindex="0">4.持っているアイテムが～～ならというif文</a></li><li><a href="#toc6" tabindex="0">5.チェックポイントデータを呼び出してテレポートする</a></li><li><a href="#toc7" tabindex="0">6.Mainクラスで有効化する</a></li></ol></li><li><a href="#toc8" tabindex="0">全文</a></li><li><a href="#toc9" tabindex="0">次のパート</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">実際に書いてみる</span></h2>



<h3 class="wp-block-heading"><span id="toc2">1.新しいクラス「ClickSpawn」の作成</span></h3>



<p>というわけで早速新しいクラス「ClickSpawn」（名前はなんでもいい）を作成。Listenerを継承しておく。(こいついっつもおんなじこと言ってんな）</p>



<pre class="wp-block-code"><code>public class ClickSpawn implements Listener {
}</code></pre>



<h3 class="wp-block-heading"><span id="toc3">2.イベントの設定</span></h3>



<p>今回はアイテムをクリックした時のイベント。と言っても前に使ったPlayerInteractEventを再利用して組んでいく。</p>



<pre class="wp-block-code"><code>public class ClickSpawn implements Listener {
    @EventHandler
    public void SetSpawn(PlayerInteractEvent e){
    }
}</code></pre>



<h3 class="wp-block-heading"><span id="toc4">3.必要な変数を取得</span></h3>



<p>今まで通りイベント関数の中に書いていく。プレイヤー型でイベントを起こしたプレイヤーを取得。ワールド型でプレイヤーがいるワールドを取得。アクション型でイベントで発生したアクションを取得する。</p>



<pre class="wp-block-preformatted">Player player = e.getPlayer();
World world = player.getWorld();
Action action = e.getAction();</pre>



<h3 class="wp-block-heading"><span id="toc5">4.持っているアイテムが～～ならというif文</span></h3>



<p>1個目のif文は（アクションが空気を右クリック||アクションがブロックを右クリック)という構造になっている。||はor、又は、を意味するコードなので空気かブロックを右クリックした場合。つまり右クリックした場合を検知するものとなっている。</p>



<p>2個目のif文はプレイヤーの持っているアイテムを取得してその種類を取得。それがMaterial（素材）クラスのスライムボールであるなら～～する。という文である。SLIME_BALLのところを好きなアイテムに変えれば様々なアイテムをテレポートのトリガーにすることができる。</p>



<pre class="wp-block-code"><code>if (action.equals(Action.RIGHT_CLICK_AIR) ||action.equals(Action.RIGHT_CLICK_BLOCK)) {
            if (player.getItemInHand().getType() == Material.SLIME_BALL) {
            //ここに 5.の中身を書いていく
            }
}
</code></pre>



<p>ここでは書いてないが以下のようにすることでアイテム名で識別することもできる。</p>



<pre class="wp-block-code"><code>if(player.getItemInHand().getItemMeta().getDisplayName()equals("アイテム名")){
}</code></pre>



<h3 class="wp-block-heading"><span id="toc6">5.チェックポイントデータを呼び出してテレポートする</span></h3>



<p>最初にString型（文字型）を宣言してプレイヤーの名前とワールドの名前を繋げている。(例：you0101 + world = you0101world)。これがチェックポイントデータを呼び出すKeyとなるのでおぼえてない方は<a href="https://yoyude.com/spigot-save/">Spigotで看板をクリックした時に自分の座標を保存するPluginを作る【CheckPoint編II/Minecraft】</a>を読んで思い出して欲しい。</p>



<p>その後Location型変数であるlocにHashMapを使いさっきのKeyを入れることで保存した値を引き出している。前にmap.put(player+world , loc)で代入したやつだ。get関数で1つ目を入れることで値であるloc（プレイヤーがチェックポイントとして保存した座標）が手に入るわけだ。</p>



<p>if文はif(!(loc == null))としてlocになにか値が入っているならば～～。という文になっている。(loc == null)はlocに値が入っていないことを意味し、!()をつけることでそれ以外という意味にしている。</p>



<p>}else{はさっきif文で限定したそれ以外。つまり値が入っていない場合だ。ここではメッセージを返すようにした。</p>



<pre class="wp-block-code"><code>    String NameWorld = player.getName() + world.getName();
    Location loc = HashMaps.map.get(NameWorld);
    if(!(loc == null)){
        player.teleport(loc);
    }else{
        player.sendMessage(ChatColor.BOLD + "" + ChatColor.BLUE + "チェックポイントが見つかりませんでした");
    }</code></pre>



<h3 class="wp-block-heading"><span id="toc7">6.Mainクラスで有効化する</span></h3>



<p>Iでやったのと変わらんのでコードだけ（クラス名は変えること）</p>



<pre class="wp-block-code"><code>public final class CHECKPOINT extends JavaPlugin {

    @Override
    public void onEnable() { //サーバーが起動した時
        // Plugin startup logic
        Server server = this.getServer();
        PluginManager pluginManager = server.getPluginManager();
        pluginManager.registerEvents(new New(), this);
        //Newというクラスを登録する（Newの部分をクラス名に変える）</code></pre>



<h2 class="wp-block-heading"><span id="toc8">全文</span></h2>



<pre class="wp-block-code"><code>package com.yoyude.checkpoint;

import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;

public class ClickSpawn implements Listener {
    @EventHandler
    public void SetSpawn(PlayerInteractEvent e){
        Player player = e.getPlayer();
        World world = player.getWorld();
        Action action = e.getAction();

        if (action.equals(Action.RIGHT_CLICK_AIR) || action.equals(Action.RIGHT_CLICK_BLOCK)) {
            if (player.getItemInHand().getType() == Material.SLIME_BALL) {

                String NameWorld = player.getName() + world.getName();

                Location loc = HashMaps.map.get(NameWorld);
                if(!(loc == null)){
                    player.teleport(loc);
                }else{
                    player.sendMessage(ChatColor.BOLD + "" + ChatColor.BLUE + "チェックポイントが見つかりませんでした");
                }

            }
        }
    }
}
</code></pre>



<h2 class="wp-block-heading"><span id="toc9">次のパート</span></h2>



<p>これでスライムボールをクリックすれば登録したチェックポイントに飛べるようになった。でもまだ物足りない。何故だろう。そう、ワールドに入った時にスライムボールを入手する手段がないのだ。というわけで次はワールド内に入ったらアイテムを配る機能を追加していこう</p>



<p>前→<a href="https://yoyude.com/spigot-save/">Spigotで看板をクリックした時に自分の座標を保存するPluginを作る【CheckPoint編II/Minecraft】</a></p>



<p>次→執筆中</p><p>The post <a href="https://yoyude.com/clickspawn/">Spigotでアイテムをクリックしたら保存した座標にテレポートするPluginを作る【CheckPointIII/Minecraft】</a> first appeared on <a href="https://yoyude.com">よゆうで紅房</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Spigotで看板をクリックした時に自分の座標を保存するPluginを作る【CheckPoint編II/Minecraft】</title>
		<link>https://yoyude.com/spigot-save/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=spigot-save</link>
		
		<dc:creator><![CDATA[よゆう]]></dc:creator>
		<pubDate>Sun, 04 Sep 2022 02:11:47 +0000</pubDate>
				<category><![CDATA[記事一覧]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Spigot]]></category>
		<guid isPermaLink="false">https://yoyude.com/?p=731</guid>

					<description><![CDATA[<p>どうも。へっぽこプラグイン作成者のよゆうです。前回の記事を見てない方はそちらを先に御覧くださいSpigotで自動で記入済みの看板を設置するPluginを作る【CheckPoint編I/Minecraft】 今回はチェック [&#8230;]</p>
<p>The post <a href="https://yoyude.com/spigot-save/">Spigotで看板をクリックした時に自分の座標を保存するPluginを作る【CheckPoint編II/Minecraft】</a> first appeared on <a href="https://yoyude.com">よゆうで紅房</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>どうも。へっぽこプラグイン作成者のよゆうです。<br>前回の記事を見てない方はそちらを先に御覧ください<br><a href="https://yoyude.com/spigot-autosign/">Spigotで自動で記入済みの看板を設置するPluginを作る【CheckPoint編I/Minecraft】</a></p>



<p>今回はチェックポイント編PartIIということで看板をクリックした際にプレイヤーごとに座標を保存するプラグインを組む。どうぞよしなに。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">実際に書いてみる</a><ol><li><a href="#toc2" tabindex="0">1.新しいクラス「ClickSign」の作成</a></li><li><a href="#toc3" tabindex="0">2.イベントの設定</a></li><li><a href="#toc4" tabindex="0">3.内容の設定</a></li><li><a href="#toc5" tabindex="0">4.HashMapの設定</a></li><li><a href="#toc6" tabindex="0">5.SaveCheckPoint関数の作成</a></li><li><a href="#toc7" tabindex="0">6.クラスを有効化する</a></li></ol></li><li><a href="#toc8" tabindex="0">次のパート</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">実際に書いてみる</span></h2>



<p>前提知識はIで説明したので割愛！割愛！</p>



<h3 class="wp-block-heading"><span id="toc2">1.新しいクラス「ClickSign」の作成</span></h3>



<p><br>というわけで早速新しいクラス「ClickSign」（名前はなんでもいい）を作成。Listenerを継承しておく。</p>



<pre class="wp-block-code"><code>public class ClickSign implements Listener {
}</code></pre>



<h3 class="wp-block-heading"><span id="toc3">2.イベントの設定</span></h3>



<p>今回呼び出すイベントはプレイヤーが看板を殴ったときのイベントなので「PlayerInteractEvent」を選択。Interactは相互作用とかそんな感じ。Spigotプラグインでは専ら殴った時に使われる。</p>



<pre class="wp-block-code"><code>    @EventHandler
    public void SetSpawn(PlayerInteractEvent e){
    }</code></pre>



<h3 class="wp-block-heading"><span id="toc4">3.内容の設定</span></h3>



<p>最初にコードをお出ししていくスタイル。</p>



<pre class="wp-block-code"><code>public void SetSpawn(PlayerInteractEvent e}{
        Player player = e.getPlayer();//プレイヤー名を変数playerに代入
        World world = player.getWorld();//プレイヤーのいるワールドを変数worldに代入
        Action action = e.getAction();//プレイヤーが行った動作を変数actionに代入
        if(e.getClickedBlock().getState() instanceof Sign){

        //クリックしたブロックを取得・状態を取得・それが看板ならば
            Sign signboard = (Sign)e.getClickedBlock().getState();
            //Sign型（看板型）の変数signboardに看板の情報を代入
            //本来は型が違うが(Sign)とつけて看板型に変更している　　　　
            String signString = signboard.getLine(1);
            //看板の２行目を取得（０から数える）
            if(signString.equals(ChatColor.BOLD + "Check Point")){
            //看板の２行目が太字のチェックポイントという文字なら
                if(player.isOnGround()) {//プレイヤーが地に足をつけてるなら
                    Location loc = player.getLocation();//プレイヤーの座標を取得
                    SaveCheckPoint(player,loc,world);//セーブする関数（後述）

                    player.sendMessage(ChatColor.BOLD + "チェックポイントを設定しました!");
                   
                    Sound.ENTITY_PARROT_IMITATE_SLIME,2,2);//音を鳴らす




                }
                else if(!(player.isOnGround())){//プレイヤーが地に足をつけてないなら
                    player.sendMessage("空中ではチェックポイントを設置できません");
                }





            }

        }
    }

}
</code></pre>



<p>という感じになる。基本的にやってることは同じだが一つ悩むところがあるだろう。</p>



<pre class="wp-block-code"><code>SaveCheckPoint(player,loc,world);//セーブする関数（後述）</code></pre>



<p>これは別の場所で書いたプログラムを呼び出しているということだ。<br>会社が外に受注しているようなイメージでOK。player,loc,worldは発注の情報である。</p>



<p>なんでこんなことをしているのかというと説明しやすくするためである。<br>ちなみに座標の変数であるlocに保存したままにしない理由は今のままだと全プレイヤーが同じlocに座標を登録しているためプレイヤーごとにチェックポイントを分けられないからである。</p>



<h3 class="wp-block-heading"><span id="toc5">4.HashMapの設定</span></h3>



<p>先程の関数を説明する前にHashMapというものについて説明しておく。まあこれに関してはググってもらったほうがわかりやすいとは思うが簡単に言えばKeyと値を保存しておくことができる関数だ。</p>



<p>早い話が合言葉。例えば「海」と入力すると「山」みたいなことを保存しておける。<br>これを今回は「player名」を入力した場合にそれぞれの座標を出力したいわけだ。</p>



<p>というわけで新しいクラス「HashMaps」を作成しコードを次のように書く</p>



<pre class="wp-block-code"><code>public class HashMaps extends JavaPlugin implements Listener {
    public static HashMap&lt;String, Location&gt; map = new HashMap&lt;&gt;();
}</code></pre>



<p>大事なとこだけ言えばこのmapという名前のHashMapは&lt;String型（文字）を入力すると登録したLocation型（座標）を返しますよ&gt;という登録である。それさえ覚えておけばOK。</p>



<h3 class="wp-block-heading"><span id="toc6">5.SaveCheckPoint関数の作成</span></h3>



<p>さっき言ってた関数を作っていく。といってもそこまで難しくない。以下で終わりである。</p>



<pre class="wp-block-code"><code>public void SaveCheckPoint(Player player,Location location , World world){
        String NameWorld = player.getName() + world.getName();
        //player名とworld名を取得して合わせている。
        //worldをいくつも使う場合チェックポイントをそれぞれ分けるため
        HashMaps.map.put(NameWorld,location);
        //HashMapsファイルにある.map.にkey(NameWorld)と値(location)を代入している
        //これで今後map.get(NameWorld)と打てばlocationが出力できるようになる。
    }</code></pre>



<p>これをClickSign.javaの@EventHandlerの上にでも書けば良い。ちなみに別クラスに書く場合は関数呼び出しの際に「別のクラス名.関数名（引数）;」と書いて呼び出す必要がある。怠い。</p>



<h3 class="wp-block-heading"><span id="toc7">6.クラスを有効化する</span></h3>



<p>Iでやったのと変わらんのでコードだけ（クラス名は変えること）</p>



<pre class="wp-block-code"><code>public final class CHECKPOINT extends JavaPlugin {

    @Override
    public void onEnable() { //サーバーが起動した時
        // Plugin startup logic
        Server server = this.getServer();
        PluginManager pluginManager = server.getPluginManager();
        pluginManager.registerEvents(new New(), this);
        //Newというクラスを登録する（Newの部分をクラス名に変える）</code></pre>



<h2 class="wp-block-heading"><span id="toc8">次のパート</span></h2>



<p>とりあえず保存することには成功したので次はチェックポイントにテレポートしていこう。</p>



<p>前→<a href="https://yoyude.com/spigot-autosign/">Spigotで自動で記入済みの看板を設置するPluginを作る【CheckPoint編I/Minecraft】</a></p>



<p>次→<a href="https://yoyude.com/clickspawn/">Spigotでアイテムをクリックしたら保存した座標にテレポートするPluginを作る【CheckPointIII/Minecraft】</a></p><p>The post <a href="https://yoyude.com/spigot-save/">Spigotで看板をクリックした時に自分の座標を保存するPluginを作る【CheckPoint編II/Minecraft】</a> first appeared on <a href="https://yoyude.com">よゆうで紅房</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Spigotで自動で記入済みの看板を設置するPluginを作る【CheckPoint編I/Minecraft】</title>
		<link>https://yoyude.com/spigot-autosign/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=spigot-autosign</link>
		
		<dc:creator><![CDATA[よゆう]]></dc:creator>
		<pubDate>Sun, 04 Sep 2022 01:26:21 +0000</pubDate>
				<category><![CDATA[記事一覧]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Spigot]]></category>
		<guid isPermaLink="false">https://yoyude.com/?p=716</guid>

					<description><![CDATA[<p>どうも。へっぽこプラグイン作成者のよゆうです。マイクラのアスレチックサーバーを作る際にチェックポイントが欲しい…。例を上げるとちぇる鯖のようなチェックポイントが欲しい。 Skriptなら実装できるけどたまにはJAVAでP [&#8230;]</p>
<p>The post <a href="https://yoyude.com/spigot-autosign/">Spigotで自動で記入済みの看板を設置するPluginを作る【CheckPoint編I/Minecraft】</a> first appeared on <a href="https://yoyude.com">よゆうで紅房</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>どうも。へっぽこプラグイン作成者のよゆうです。<br>マイクラのアスレチックサーバーを作る際にチェックポイントが欲しい…。<br>例を上げると<a href="https://www.mchel.net/">ちぇる鯖</a>のようなチェックポイントが欲しい。</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="534" src="https://yoyude.com/wp-content/uploads/2022/09/2022-09-04_09.30.19-1024x534.jpg" alt="" class="wp-image-717" srcset="https://yoyude.com/wp-content/uploads/2022/09/2022-09-04_09.30.19-1024x534.jpg 1024w, https://yoyude.com/wp-content/uploads/2022/09/2022-09-04_09.30.19-300x156.jpg 300w, https://yoyude.com/wp-content/uploads/2022/09/2022-09-04_09.30.19-768x400.jpg 768w, https://yoyude.com/wp-content/uploads/2022/09/2022-09-04_09.30.19-1536x801.jpg 1536w, https://yoyude.com/wp-content/uploads/2022/09/2022-09-04_09.30.19.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>クリックするとチェックポイントがセーブされる</figcaption></figure>



<p>Skriptなら実装できるけどたまにはJAVAでPluginを作ってみたい……。</p>



<p>というわけで作ってみました。チェックポイント編第一弾</p>



<p style="font-size:45px"><strong>「看板を置くプラグイン！！」</strong></p>



<p>より具体的にいうならば看板に「C」と入力した時だけ看板の内容をチェックポイント用に書き換えるプラグインである。</p>



<p>地味だと思った方はよゆうポイントマイナス√3点です。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">前提知識</a><ol><li><a href="#toc2" tabindex="0">環境構築が済んでいる</a></li><li><a href="#toc3" tabindex="0">JAVAの基礎ができている</a></li><li><a href="#toc4" tabindex="0">プラグイン作成の準備ができる</a></li></ol></li><li><a href="#toc5" tabindex="0">実際に書いてみる</a><ol><li><a href="#toc6" tabindex="0">1.新しくクラスを作る</a></li><li><a href="#toc7" tabindex="0">2.Listner関係のクラスであることを書く</a></li><li><a href="#toc8" tabindex="0">3.イベントを書く</a></li><li><a href="#toc9" tabindex="0">4.イベントの中身を書く</a></li><li><a href="#toc10" tabindex="0">5.メインクラスにイベントを登録する。</a></li></ol></li><li><a href="#toc11" tabindex="0">今回のプラグインを動かしてみる</a></li><li><a href="#toc12" tabindex="0">次のパート</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">前提知識</span></h2>



<p>最初に前提として必要とする知識について触れておきます。</p>



<h3 class="wp-block-heading"><span id="toc2">環境構築が済んでいる</span></h3>



<p>まずこれ。分かんない人は「Plugin作成　環境構築」とかでググってください。EclipseだとかVScodeだとかIntelliJ IDEAだとかまあいろいろ出てくるはずです。迷ったらIntelliJ IDEAでいいです。俺もそれなので。</p>



<h3 class="wp-block-heading"><span id="toc3">JAVAの基礎ができている</span></h3>



<p>ここでいう基礎ってのは構文とかじゃなくてファイルの位置とかです。メインクラスがあって別のクラスを作ってそれを呼び出すとかなんとなく理解してればいいです。理解してなくても動くプラグインが組めてるならそれでいいです。</p>



<h3 class="wp-block-heading"><span id="toc4">プラグイン作成の準備ができる</span></h3>



<p>要するにIntelliJ IDEAを起動→MinecraftPluginを作成→Spigot→諸々の情報を記入（名前とversionとか）→メインクラスが出来上がる。これができればOK。こんなもんはググれば出てきます。割愛。</p>



<h2 class="wp-block-heading"><span id="toc5">実際に書いてみる</span></h2>



<p>ここまで来たなら後はプラグインを書くだけ。versionは1.12.2で作成。</p>



<h3 class="wp-block-heading"><span id="toc6">1.新しくクラスを作る</span></h3>



<p>最初の段階ではこうなっているはず。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="547" src="https://yoyude.com/wp-content/uploads/2022/09/1-1024x547.png" alt="" class="wp-image-718" srcset="https://yoyude.com/wp-content/uploads/2022/09/1-1024x547.png 1024w, https://yoyude.com/wp-content/uploads/2022/09/1-300x160.png 300w, https://yoyude.com/wp-content/uploads/2022/09/1-768x410.png 768w, https://yoyude.com/wp-content/uploads/2022/09/1-1536x821.png 1536w, https://yoyude.com/wp-content/uploads/2022/09/1.png 1911w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>左にあるCというマークとTestCPという文字（今回はプラグイン名をTestCPにしたため）が見えるはずだ。そしたらそこを右クリック。新規→新しいクラス→クラス名を入力で新しいクラスが作れる。名前はなんでもOK。拡張子はつけなくても自動でつく。便利。</p>



<h3 class="has-black-color has-key-color-background-color has-text-color has-background wp-block-heading"><span id="toc7">2.Listner関係のクラスであることを書く</span></h3>



<pre class="wp-block-code java has-key-color-color has-black-background-color has-text-color has-background"><code>public class New {
}</code></pre>



<p>最初は上のようにだけなるはず。（今回はNewというクラスを作成した。名前は適当）<br>それをListner…。要はプレイヤーに関するイベントがあったことを書きたいのでそういうクラスだとコンピューターに伝えるためのコード。具体的に書くとこう。</p>



<pre class="wp-block-code"><code>public class New implements Listener {
}</code></pre>



<p>この時Listenerの部分が赤色になったらカーソルを持っていきクラスにインポートというのを押してもらえればOK。最悪</p>



<pre class="wp-block-code"><code>import org.bukkit.event.Listener;</code></pre>



<p>と上に追記すればなんとかなる。やってることも同じ。</p>



<p>ここまで書いたのをまとめると</p>



<pre class="wp-block-code"><code>package com.yoyude.testcp;//パッケージはあなたの設定した名前になる。

import org.bukkit.event.Listener;//要するにListener関連の装備にしましたよってこと。

public class New implements Listener{
    //ここにイベントを書いていく
}</code></pre>



<h3 class="wp-block-heading"><span id="toc8">3.イベントを書く</span></h3>



<p>イベントというのは「プレイヤーが参加した時」や「プレイヤーがブロックをクリックした時」など様々なプレイヤー関連の動きがあった時に呼び出されるものである。イベント一覧は「Spigot イベント一覧」でググれば出てくるので割愛。</p>



<p>今回は看板を置いた時に記入済みの看板を設置したいのでイベントは「ブロックを置いた時のイベント」。つまり「BlockPlaceEvent」…と思ったら大間違い。というかできなくもないだろうがその場合装飾で看板を置いてもチェックポイントになる事案が発生するまである。</p>



<p>今回作るプラグインは「C」と入力した場合に書き換えるプラグインなので呼び出すイベントは</p>



<pre class="wp-block-code"><code>@EventHandler
public void PlacePoint(SignChangeEvent e){
}</code></pre>



<p>SignChangeEvent。看板が書き換わった時のイベントとなる。<br>簡単に説明すると@EventHandlerはここにイベントのプログラムを書きますよということ。PlacePointというのは適当につけた関数名（何でもいい）。後ろが呼び出すイベントでeはそのEventのこと。後述。ともかくこれで看板を書いた時に呼び出すプログラムの土台ができたわけだ。</p>



<pre class="wp-block-code"><code>public class SignPlace implements Listener {
    @EventHandler
    public void PlacePoint(SignChangeEvent e){
    }</code></pre>



<h3 class="wp-block-heading"><span id="toc9">4.イベントの中身を書く</span></h3>



<p>今のままだとイベントが呼び出されても特になにもしない。空っぽだ。<br>というわけでイベントが呼び出された時起こしたい内容を書いていく。実際に出来上がったものがこちらになります（③分クッキング風）</p>



<pre class="wp-block-code"><code>Player player = e.getPlayer();
//Player型の変数player(名前はなんでもいい）にイベントを起こしたプレイヤーを代入している
//event.getPlayer()といった感じ。
player.sendMessage("Cと記入すればチェックポイントが設置できます");
//プレイヤーに使い方を伝えるメッセージを送る。
String signString = e.getLine(0);
//String型（要するに文字型）の変数signStringに看板の0行目（要するに1行目）の文字を代入している。
//「C」とプレイヤーが看板に書けば「C」が代入される。
if(signString.equals("C")) {//もし文字がCならというif文
    player.sendMessage("チェックポイントを設置しました");
    //プレイヤーにメッセージ
    e.setLine(0, ChatColor.AQUA + "★★★★★★★★★★★★★★★★★★★");
    e.setLine(1,ChatColor.BOLD + "Check Point");
    e.setLine(2,ChatColor.BOLD + "Right Click");
    e.setLine(3,ChatColor.AQUA + "★★★★★★★★★★★★★★★★★★★");
    //e.setLineは看板を書き換える構文。それぞれ(何行目,内容)という形になっている。
    //ChatColorは装飾を変更できる。BOLDは太字。AQUA等は色。</code></pre>



<p>こんな感じになる。if文がわからない人はJAVAなりC言語なりを勉強して欲しい。そんなに難しくないので１時間もあれば理解できるはずだ。</p>



<p>これで一応クラスは完成したことになる。全容はこんな感じだ。</p>



<pre class="wp-block-code"><code>package com.yoyude.checkpoint;



import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.SignChangeEvent;



public class SignPlace implements Listener {
    @EventHandler
    public void PlacePoint(SignChangeEvent e){
        Player player = e.getPlayer();

        player.sendMessage("Cと記入すればチェックポイントが設置できます");
        String signString = e.getLine(0);
        if(signString.equals("C")) {

            player.sendMessage("チェックポイントを設置しました");
            e.setLine(0, ChatColor.AQUA + "★★★★★★★★★★★★★★★★★★★");
            e.setLine(1,ChatColor.BOLD + "Check Point");
            e.setLine(2,ChatColor.BOLD + "Right Click");
            e.setLine(3,ChatColor.AQUA + "★★★★★★★★★★★★★★★★★★★")
;
        }

    }
}</code></pre>



<p>これで晴れてプラグイン完成。というわけではない。実は最後の仕上げが残っている。</p>



<h3 class="wp-block-heading"><span id="toc10">5.メインクラスにイベントを登録する。</span></h3>



<p>このままだとイベントを書いたクラスをメインクラスが読み込んでくれないのだ。というわけで手つかずだったメインクラスに書き込んでいく。完成図はこちら。</p>



<pre class="wp-block-code"><code>public final class CHECKPOINT extends JavaPlugin {

    @Override
    public void onEnable() { //サーバーが起動した時
        // Plugin startup logic
        Server server = this.getServer();
        PluginManager pluginManager = server.getPluginManager();
        pluginManager.registerEvents(new New(), this);
        //Newというクラスを登録する（Newの部分をクラス名に変える）
    }</code></pre>



<p>これでプラグインを入れてサーバーを起動すればOK。<br>右上に緑の矢印があるはずなのでそれをクリックしてプラグインをjarに変換する。</p>



<p>これにてプラグインは完成！完璧なめでたしめでたしだな</p>



<h2 class="wp-block-heading"><span id="toc11">今回のプラグインを動かしてみる</span></h2>



<p>お待ちかねの実装タイム。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="534" src="https://yoyude.com/wp-content/uploads/2022/09/2022-09-04_10.20.38-1024x534.png" alt="" class="wp-image-727" srcset="https://yoyude.com/wp-content/uploads/2022/09/2022-09-04_10.20.38-1024x534.png 1024w, https://yoyude.com/wp-content/uploads/2022/09/2022-09-04_10.20.38-300x156.png 300w, https://yoyude.com/wp-content/uploads/2022/09/2022-09-04_10.20.38-768x400.png 768w, https://yoyude.com/wp-content/uploads/2022/09/2022-09-04_10.20.38-1536x801.png 1536w, https://yoyude.com/wp-content/uploads/2022/09/2022-09-04_10.20.38.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>「C」と入力して完了を押すと？</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="534" src="https://yoyude.com/wp-content/uploads/2022/09/2022-09-04_10.20.43-1024x534.png" alt="" class="wp-image-728" srcset="https://yoyude.com/wp-content/uploads/2022/09/2022-09-04_10.20.43-1024x534.png 1024w, https://yoyude.com/wp-content/uploads/2022/09/2022-09-04_10.20.43-300x156.png 300w, https://yoyude.com/wp-content/uploads/2022/09/2022-09-04_10.20.43-768x400.png 768w, https://yoyude.com/wp-content/uploads/2022/09/2022-09-04_10.20.43-1536x801.png 1536w, https://yoyude.com/wp-content/uploads/2022/09/2022-09-04_10.20.43.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>CheckPointができた！</figcaption></figure>



<h2 class="wp-block-heading"><span id="toc12">次のパート</span></h2>



<p>まだ看板ができただけでクリックしても何も反応しない。<br>ということで次はチェックポイントを記録する機能を書いていこう！<br><br>次 <a href="https://yoyude.com/spigot-save/">Spigotで看板をクリックした時に自分の座標を保存する【CheckPoint編II/Minecraft】</a></p><p>The post <a href="https://yoyude.com/spigot-autosign/">Spigotで自動で記入済みの看板を設置するPluginを作る【CheckPoint編I/Minecraft】</a> first appeared on <a href="https://yoyude.com">よゆうで紅房</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
