【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

Modding・サーバPlugin制作・ツール制作など、開発関連の質問があればこちらにお願い致します。
フォーラムルール
質問関連フォーラムで質問する時は、必ず次のトピックを一読/厳守お願い致します。
viewtopic.php?f=5&t=999
  • (PostNo.312155)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by ankou25255 » 2018年1月02日(火) 14:30

amata1219さんありがとうございます!
返信遅れてしまって申し訳ないです!
おかげで解決しました!
ankou25255
ID:5d431239
 

  • (PostNo.312390)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by smk7758 » 2018年1月07日(日) 12:21

ゲスト さんが書きました:プレイヤーをテレポートせずに、YawとPitchのみを変更する方法はありますか?

TPせず…ではないけど、TP時にx,y,zにプレーヤーの現在位置を指定して、Yaw, Pitchには変更したい値を入れ、実行(コマンドでもプラグインでも)でどうでしょうか。
PC: Windows 8.1 Pro 64bit CPU:intel i7-4770 RAM:16GB
アバター
smk7758
ID:4c154b7a
鉄鉱掘り
 
記事: 260
登録日時: 2014年3月12日(水) 16:30
お住まい: 愛知県/三河

  • (PostNo.312462)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by ankou2525 » 2018年1月09日(火) 10:00

HashMap<Player, Integer> kill = new HashMap<Player, Integer>();
このマップを使ってプレイヤーがキルしたらプレイヤー値に追加していき、試合が終わった時に最大キルの人を取得したいんですがよくわかりません。
HashMapのValueからkeyを取得する方法を教えていただきたいです。
過去に同じような質問あったらすいません。
お願いします。
24時間鯖稼働中!!!!!
ankou.mc.craftT.net
ankou2525
ID:10d8671c
木を殴ってる
 
記事: 19
登録日時: 2013年10月19日(土) 18:07

  • (PostNo.312463)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by elise_blacklab » 2018年1月09日(火) 10:39

ankou2525 さんが書きました:HashMap<Player, Integer> kill = new HashMap<Player, Integer>();
このマップを使ってプレイヤーがキルしたらプレイヤー値に追加していき、試合が終わった時に最大キルの人を取得したいんですがよくわかりません。
HashMapのValueからkeyを取得する方法を教えていただきたいです。
過去に同じような質問あったらすいません。
お願いします。

別にPlugin固有の疑問じゃないし,entrySetで走査すればいいのでは.
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:a6c01101
掘り廃人
 
記事: 2536
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.312464)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by ankou2525 » 2018年1月09日(火) 11:08

elise_blacklab さんが書きました:ankou2525 さんが書きました:
HashMap<Player, Integer> kill = new HashMap<Player, Integer>();
このマップを使ってプレイヤーがキルしたらプレイヤー値に追加していき、試合が終わった時に最大キルの人を取得したいんですがよくわかりません。
HashMapのValueからkeyを取得する方法を教えていただきたいです。
過去に同じような質問あったらすいません。
お願いします。

別にPlugin固有の疑問じゃないし,entrySetで走査すればいいのでは.

簡単なサンプルとか書いてもらえないでしょうか?
できればお願いします。
ankou2525
ID:10d8671c
木を殴ってる
 
記事: 19
登録日時: 2013年10月19日(土) 18:07

  • (PostNo.312474)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by elise_blacklab » 2018年1月09日(火) 16:18

ankou2525 さんが書きました:簡単なサンプルとか書いてもらえないでしょうか?
できればお願いします。

コード: 全て選択
int max = 0;
Player topplayer = null;
for (Entry<Player, Integer> entry: map.entrySet()){
    if (entry.getValue() > max){
        max = entry.getValue();
        topplayer = entry.getKey();
    }
}

いまいち書き方が原始的だけどこんな感じ.Entryを一つ一つ走査する.
KeyとValueのセットが欲しいならこれで良い.このくらいは基本的なアルゴリズムとして,Javaのドキュメントを見る前に前提として知っておくと良いと思います.

当然これだと1人しか取得できないので,配列とかで複数人格納できるようにすれば一応完成だけど,正直sort()用にcompareTo()を実装する方が後の参照は楽.
繰り返しになりますがHashMapのソートはPluginに限った話ではないので,まずはggった方が有益な情報がいくらでも見つかります.
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:0f87040f
掘り廃人
 
記事: 2536
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.312499)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by ankou2525 » 2018年1月10日(水) 06:54

elise_blacklab さんが書きました:
ankou2525 さんが書きました:簡単なサンプルとか書いてもらえないでしょうか?
できればお願いします。

コード: 全て選択
int max = 0;
Player topplayer = null;
for (Entry<Player, Integer> entry: map.entrySet()){
    if (entry.getValue() > max){
        max = entry.getValue();
        topplayer = entry.getKey();
    }
}

いまいち書き方が原始的だけどこんな感じ.Entryを一つ一つ走査する.
KeyとValueのセットが欲しいならこれで良い.このくらいは基本的なアルゴリズムとして,Javaのドキュメントを見る前に前提として知っておくと良いと思います.

当然これだと1人しか取得できないので,配列とかで複数人格納できるようにすれば一応完成だけど,正直sort()用にcompareTo()を実装する方が後の参照は楽.
繰り返しになりますがHashMapのソートはPluginに限った話ではないので,まずはggった方が有益な情報がいくらでも見つかります.

ありがとうございます!
今後質問する前にしっかりと調べるようにします。
24時間鯖稼働中!!!!!
ankou.mc.craftT.net
ankou2525
ID:10d8671c
木を殴ってる
 
記事: 19
登録日時: 2013年10月19日(土) 18:07

  • (PostNo.312518)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by smk7758 » 2018年1月10日(水) 22:29

Spigotプラグイン制作において、設定ファイルの値をフィードとして保持したいと思って、以下のコードを書きました。
Java8, Spigot-1.12.2-R0.1
コード: 全て選択
import org.bukkit.configuration.file.FileConfiguration;

public class LanguageFile {
   private FileConfigurationEx fc = null;
   public String start, finish, stop, win_runner, win_hunter;

   public LanguageFile(FileConfiguration fc) {
      this.fc = (FileConfigurationEx) fc;
   }

   public enum Keys {
      start, finish, stop, win_runner, win_hunter;
   }

   public void reload() {
      start = fc.getString(Keys.start);
      finish = fc.getString(Keys.finish);
      stop = fc.getString(Keys.stop);
      win_runner = fc.getString(Keys.win_runner);
      win_hunter = fc.getString(Keys.win_hunter);
   }

   public void save() {
      fc.set(Keys.start, start);
   }

   private abstract class FileConfigurationEx extends FileConfiguration {
      private String getString(Keys key) {
         return super.getString(key.toString());
      }

      private void set(Keys key, Object object) {
         super.set(key.toString(), object);
      }
   }
}

このソースのreloadメソッドで、Keys(Enum)の全ての値を持ってきて、親クラスのフィードに代入しているのですが、少し煩雑なように思えます。
たとえば、for文などで短く出来ないでしょうか。
ご意見を頂けたら幸いです。
PC: Windows 8.1 Pro 64bit CPU:intel i7-4770 RAM:16GB
アバター
smk7758
ID:933cb51e
鉄鉱掘り
 
記事: 260
登録日時: 2014年3月12日(水) 16:30
お住まい: 愛知県/三河

  • (PostNo.312521)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by smk7758 » 2018年1月10日(水) 23:11

smk7758 さんが書きました:Spigotプラグイン制作において、設定ファイルの値をフィードとして保持したいと思って、以下のコードを書きました。
Java8, Spigot-1.12.2-R0.1
コード: 全て選択
import org.bukkit.configuration.file.FileConfiguration;

public class LanguageFile {
   private FileConfigurationEx fc = null;
   public String start, finish, stop, win_runner, win_hunter;

   public LanguageFile(FileConfiguration fc) {
      this.fc = (FileConfigurationEx) fc;
   }

   public enum Keys {
      start, finish, stop, win_runner, win_hunter;
   }

   public void reload() {
      start = fc.getString(Keys.start);
      finish = fc.getString(Keys.finish);
      stop = fc.getString(Keys.stop);
      win_runner = fc.getString(Keys.win_runner);
      win_hunter = fc.getString(Keys.win_hunter);
   }

   public void save() {
      fc.set(Keys.start, start);
   }

   private abstract class FileConfigurationEx extends FileConfiguration {
      private String getString(Keys key) {
         return super.getString(key.toString());
      }

      private void set(Keys key, Object object) {
         super.set(key.toString(), object);
      }
   }
}

このソースのreloadメソッドで、Keys(Enum)の全ての値を持ってきて、親クラスのフィードに代入しているのですが、少し煩雑なように思えます。
たとえば、for文などで短く出来ないでしょうか。
ご意見を頂けたら幸いです。

自己解決(?)しました。以下のようにすることでちょっとおしゃれになった気がします。

コード: 全て選択
import org.bukkit.configuration.file.FileConfiguration;

public abstract class FileConfigurationEx extends FileConfiguration {
   public String getString(SettingKeys key) {
      return super.getString(key.toString());
   }

   public void set(SettingKeys key) {
      super.set(key.toString(), key.getText());
   }
}

コード: 全て選択
public interface SettingKeys {
   public String getText();

   public void setText(String text);
}

コード: 全て選択
import org.bukkit.configuration.file.FileConfiguration;

public class LanguageFile {
   FileConfigurationEx fc = null;

   public LanguageFile(FileConfiguration fc) {
      this.fc = (FileConfigurationEx) fc;
   }

   public enum LanguageFileKeys implements SettingKeys {
      start(""),
      finish(""),
      stop(""),
      win_runner(""),
      win_hunter("");

      private String text;

      private LanguageFileKeys(String text) {
         this.setText(text);
      }

      public String getText() {
         return text;
      }

      public void setText(String text) {
         this.text = text;
      }
   }

   public void reload() {
      for (LanguageFileKeys key : LanguageFileKeys.values()) {
         key.setText(fc.getString(key));
      }
   }

   public void save() {
      for (LanguageFileKeys key : LanguageFileKeys.values()) {
         fc.set(key);
      }
   }
}
PC: Windows 8.1 Pro 64bit CPU:intel i7-4770 RAM:16GB
アバター
smk7758
ID:933cb51e
鉄鉱掘り
 
記事: 260
登録日時: 2014年3月12日(水) 16:30
お住まい: 愛知県/三河

  • (PostNo.312522)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by King(qpwakaba) » 2018年1月10日(水) 23:24

smk7758 さんが書きました:Spigotプラグイン制作において、設定ファイルの値をフィードとして保持したいと思って、以下のコードを書きました。
Java8, Spigot-1.12.2-R0.1
コード: 全て選択
import org.bukkit.configuration.file.FileConfiguration;

public class LanguageFile {
   private FileConfigurationEx fc = null;
   public String start, finish, stop, win_runner, win_hunter;

   public LanguageFile(FileConfiguration fc) {
      this.fc = (FileConfigurationEx) fc;
   }

   public enum Keys {
      start, finish, stop, win_runner, win_hunter;
   }

   public void reload() {
      start = fc.getString(Keys.start);
      finish = fc.getString(Keys.finish);
      stop = fc.getString(Keys.stop);
      win_runner = fc.getString(Keys.win_runner);
      win_hunter = fc.getString(Keys.win_hunter);
   }

   public void save() {
      fc.set(Keys.start, start);
   }

   private abstract class FileConfigurationEx extends FileConfiguration {
      private String getString(Keys key) {
         return super.getString(key.toString());
      }

      private void set(Keys key, Object object) {
         super.set(key.toString(), object);
      }
   }
}

このソースのreloadメソッドで、Keys(Enum)の全ての値を持ってきて、親クラスのフィードに代入しているのですが、少し煩雑なように思えます。
たとえば、for文などで短く出来ないでしょうか。
ご意見を頂けたら幸いです。


((Enum#values() ってのがあるよ)
以下サイン
調べて見つからないことを質問して、「そのくらい調べろ」と言われたら それは調べが足りないとき。

投稿画面のBBコード挿入ボタン を追加するユーザースクリプト作りました。良かったらどうぞ。
https://greasyfork.org/ja/scripts/18657
最大描画距離を64チャンクまで伸ばすMod作ってます。
viewtopic.php?t=30697
アバター
King(qpwakaba)
ID:b0107504
ダイヤモンド掘り
 
記事: 831
登録日時: 2013年3月26日(火) 10:25

  • (PostNo.312526)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by smk7758 » 2018年1月11日(木) 01:17

King(qpwakaba) さんが書きました:
smk7758 さんが書きました:Spigotプラグイン制作において、設定ファイルの値をフィードとして保持したいと思って、以下のコードを書きました。
Java8, Spigot-1.12.2-R0.1
コード: 全て選択
import org.bukkit.configuration.file.FileConfiguration;

public class LanguageFile {
   private FileConfigurationEx fc = null;
   public String start, finish, stop, win_runner, win_hunter;

   public LanguageFile(FileConfiguration fc) {
      this.fc = (FileConfigurationEx) fc;
   }

   public enum Keys {
      start, finish, stop, win_runner, win_hunter;
   }

   public void reload() {
      start = fc.getString(Keys.start);
      finish = fc.getString(Keys.finish);
      stop = fc.getString(Keys.stop);
      win_runner = fc.getString(Keys.win_runner);
      win_hunter = fc.getString(Keys.win_hunter);
   }

   public void save() {
      fc.set(Keys.start, start);
   }

   private abstract class FileConfigurationEx extends FileConfiguration {
      private String getString(Keys key) {
         return super.getString(key.toString());
      }

      private void set(Keys key, Object object) {
         super.set(key.toString(), object);
      }
   }
}

このソースのreloadメソッドで、Keys(Enum)の全ての値を持ってきて、親クラスのフィードに代入しているのですが、少し煩雑なように思えます。
たとえば、for文などで短く出来ないでしょうか。
ご意見を頂けたら幸いです。


((Enum#values() ってのがあるよ)

reloadメソッドにおいての問題として、たとえばfor文にしたとして、Keys.values()で取得しても任意のフィードに代入するには、任意にフィードを指定し代入する他ないため、以下のようにただEnumのvalues()を用いることはできないように思いましたが、どのようにすればよいでしょうか。
コード: 全て選択
public void reload() {
   for (Keys key : Keys.values()) {
      ?(できない) = fc.getString(key);
   }
}

自己解決していますが、別の方法があればご教授いただきたく存じます。
PC: Windows 8.1 Pro 64bit CPU:intel i7-4770 RAM:16GB
アバター
smk7758
ID:933cb51e
鉄鉱掘り
 
記事: 260
登録日時: 2014年3月12日(水) 16:30
お住まい: 愛知県/三河

  • (PostNo.312531)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by ankou2525 » 2018年1月11日(木) 09:52

フォーラムの過去の質問を参考にしたり調べてみたりしてもわからなかったので質問します。
コード: 全て選択
   @EventHandler
   public void PR(final ProjectileLaunchEvent e){
      if(e.getEntity().getType().equals(EntityType.ARROW)){
         new BukkitRunnable(){
            @Override
            public void run() {
               // TODO 自動生成されたメソッド・スタブ
               if(!e.getEntity().isOnGround()){
                  Location loc = e.getEntity().getLocation();
                  Firework fw = (Firework) e.getEntity().getWorld().spawnEntity(loc, EntityType.FIREWORK);
                  FireworkMeta fwm = fw.getFireworkMeta();
                  fwm.setPower(0);
                  fwm.addEffect(FireworkEffect.builder()
                        .trail(false)
                        .flicker(false)
                        .with(Type.BALL_LARGE)
                        .withColor(Color.BLACK)
                        .withFade(Color.AQUA)
                        .build());
                  fw.setFireworkMeta(fwm);
                  fw.detonate();
               } else {
                  cancel();
               }
            }
         }.runTaskTimer(this, 0L, 1L);
      }
   }

矢を打ったと同時に花火の爆発エフェクトを地面につくまで矢の位置で発生させたいんですが、fw.detonate();を入れると破裂エフェクトが出なくなります。
fw.detonate();を消すとすぐ破裂せず少し上で破裂します。
どうすればいいんでしょうか?お願いします。
24時間鯖稼働中!!!!!
ankou.mc.craftT.net
ankou2525
ID:10d8671c
木を殴ってる
 
記事: 19
登録日時: 2013年10月19日(土) 18:07

  • (PostNo.312568)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by King(qpwakaba) » 2018年1月12日(金) 02:16

smk7758 さんが書きました:
King(qpwakaba) さんが書きました:((Enum#values() ってのがあるよ)

reloadメソッドにおいての問題として、たとえばfor文にしたとして、Keys.values()で取得しても任意のフィードに代入するには、任意にフィードを指定し代入する他ないため、以下のようにただEnumのvalues()を用いることはできないように思いましたが、どのようにすればよいでしょうか。
コード: 全て選択
public void reload() {
   for (Keys key : Keys.values()) {
      ?(できない) = fc.getString(key);
   }
}

自己解決していますが、別の方法があればご教授いただきたく存じます。


あー,なるほど。そこ見落としてました。Field#getName と Field#setを使うとか,ちょっとごり押しっぽいコード書かないと厳しいかも。
以下サイン
調べて見つからないことを質問して、「そのくらい調べろ」と言われたら それは調べが足りないとき。

投稿画面のBBコード挿入ボタン を追加するユーザースクリプト作りました。良かったらどうぞ。
https://greasyfork.org/ja/scripts/18657
最大描画距離を64チャンクまで伸ばすMod作ってます。
viewtopic.php?t=30697
アバター
King(qpwakaba)
ID:a6eef4e2
ダイヤモンド掘り
 
記事: 831
登録日時: 2013年3月26日(火) 10:25

  • (PostNo.313419)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by ゲスト » 2018年2月06日(火) 22:47

Bukkit1.12.2,Java8です。
自作プラグインから、その他のプラグインのコマンドを実行する方法を教えて下さい。
具体的な使用方法は、自作プラグインでイベントを監視し、発火したところでPermissionEXの権限設定用のコマンドをコンソールに実行させたいのです。
ご返答よろしくお願いします。
ゲスト
ID:4892dd44
 

  • (PostNo.313421)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by TA3 » 2018年2月06日(火) 23:26

ゲスト さんが書きました:Bukkit1.12.2,Java8です。
自作プラグインから、その他のプラグインのコマンドを実行する方法を教えて下さい。
具体的な使用方法は、自作プラグインでイベントを監視し、発火したところでPermissionEXの権限設定用のコマンドをコンソールに実行させたいのです。
ご返答よろしくお願いします。


コマンドを実行させるだけなら Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "/pex ...."); で可能です。
アバター
TA3
ID:a95d26b2
木を殴ってる
 
記事: 18
登録日時: 2016年8月18日(木) 17:44

  • (PostNo.313427)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by ゲスト » 2018年2月07日(水) 12:45

>>TA3さん
ありがとうございました。期待通りの実装ができました。
ゲスト
ID:4892dd44
 

  • (PostNo.313636)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by minecraftidk » 2018年2月12日(月) 11:23

MCCore v1.64 SKillAPI v3.103 Bukkit v1.11.2 Java8です
自作pluginからSKILLAPIのプレイヤーの職業(CLASS)の名前を取得する方法が欲しいです。
PlayerクラスのgetPlayerListからTABキーに表示されている職業+名前を取得しようと考えましたが取得できるのは
名前だけでした。またSKILLAPIのGITHUBやAPIも確認してみましたがわからなかったため質問させていただきました。
職業を取得するのはそもそも可能なんですかね?
足りてない情報がありましたら指摘お願いします。
minecraftidk
ID:39ebaf7f
 

  • (PostNo.313717)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by nobody » 2018年2月14日(水) 14:50

手法が良く分からなかったため、質問させていただきます。
使用環境は spigot 1.12.2 です。

プレイヤーが見ているブロックの名前を画面に表示するpluginを作成しています。

実際にプレイヤーが見ているブロックの情報を取得する事は出来たのですが、そのブロックの名前を取得する場所で躓いています。
以下のような形で試行したのですが、うまく取得できませんでした。

コード: 全て選択
@EventHandler(ignoreCancelled = true)
public void onPlayerMoveEvent(PlayerMoveEvent event) {

    // プレイヤーの向いている方向にあるブロックを取得
    Player player = event.getPlayer();
    Block block = player.getTargetBlock((Set<Material>)null, 5);

    // ブロックのアイテム名を取得
    Material material = block.getType();
    ItemStack item = new ItemStack(material);
    String name = item.getItemMeta().getDisplayName();
    
    // ブロック名を表示
    player.sendMessage(name);
}
 


上記だと、空文字になりました。
どうやらMetaItemから引けるgetDisplayName()は、例えば金床で付けた名前しか取得できず、初期の名前を持ってくるのには不向きのようです。
material.toString()も試してみましたが、こちらは定数名をそのまま文字列にしたものしか取得できませんでした。

取得したいアイテム名としては、例えばホットバーでアイテムにカーソルを合わせた時、ホットバー上部に表示されるアイテム名と同じ文字列を希望しています。
これを取得する方法について、ご教示頂けませんでしょうか。
※例えばswitch-caseを使ってmaterial定数に合致する文字列をコード上に書き込むような手法はなるべく避けたいです。

以上、よろしくお願いいたします。
nobody
ID:48d6e241
木を殴ってる
 
記事: 11
登録日時: 2018年2月14日(水) 14:45

  • (PostNo.313735)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by toyblocks » 2018年2月15日(木) 00:43

nobody さんが書きました:手法が良く分からなかったため、質問させていただきます。
使用環境は spigot 1.12.2 です。

プレイヤーが見ているブロックの名前を画面に表示するpluginを作成しています。

実際にプレイヤーが見ているブロックの情報を取得する事は出来たのですが、そのブロックの名前を取得する場所で躓いています。
以下のような形で試行したのですが、うまく取得できませんでした。

コード: 全て選択
@EventHandler(ignoreCancelled = true)
public void onPlayerMoveEvent(PlayerMoveEvent event) {

    // プレイヤーの向いている方向にあるブロックを取得
    Player player = event.getPlayer();
    Block block = player.getTargetBlock((Set<Material>)null, 5);

    // ブロックのアイテム名を取得
    Material material = block.getType();
    ItemStack item = new ItemStack(material);
    String name = item.getItemMeta().getDisplayName();
    
    // ブロック名を表示
    player.sendMessage(name);
}
 


上記だと、空文字になりました。
どうやらMetaItemから引けるgetDisplayName()は、例えば金床で付けた名前しか取得できず、初期の名前を持ってくるのには不向きのようです。
material.toString()も試してみましたが、こちらは定数名をそのまま文字列にしたものしか取得できませんでした。

取得したいアイテム名としては、例えばホットバーでアイテムにカーソルを合わせた時、ホットバー上部に表示されるアイテム名と同じ文字列を希望しています。
これを取得する方法について、ご教示頂けませんでしょうか。
※例えばswitch-caseを使ってmaterial定数に合致する文字列をコード上に書き込むような手法はなるべく避けたいです。

以上、よろしくお願いいたします。


nobodyさん、質問の趣旨と多少異なるかもしれませんが、少しヒントになるかもしれないので書き込みをさせて頂きます。

現在のマインクラフトサーバーは、クライアントに対して素の状態のアイテムの「名前」は送信していません。というのも、英語のプレイヤーには「Stone」、日本語のプレイヤーには「石」といった風に、あるアイテムがどう表示されるかはクライアント依存であるからです。そのため、サーバーからはアイテムIDが埋め込まれた、特殊な形式のテキストが送信されているだけで、そのテキストをクライアントが必要な個所を翻訳するという形となっています。

もしあなたが、サーバー側でその「名前」を使った処理をする必要性がなく、ただ単にクライアント側に表示させることだけを目的にしているのであれば、TranslatableComponentの利用をお勧めします。BukkitではなくSpigotのみでしか利用できない機能ですが、こちらのjavadocのメソッドから、`net.md_5.bungee.api.chat.TranslatableComponent`を流し込むことで、クライアントサイドでの翻訳を可能にします。

ここで詳細を語らずとも、検索すれば関連ドキュメントを発見できるかと思いますので、もし興味があるようでしたらお試しください。
またわからないことがあった際には、質問して頂ければと思います。
Plugin製作してます。Chaten, UsefulBarrier, ChannelSlot, Lic,ElytraBooster
バグ報告や制作依頼への反応は多分twitterが一番早いと思います。
アバター
toyblocks
ID:8f5cb5a1
石掘り
 
記事: 72
登録日時: 2014年7月09日(水) 23:36

  • (PostNo.313742)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by nobody » 2018年2月15日(木) 11:01

>toyblocksさん
回答ありがとうございました。
サーバー側で扱えない理由も納得です。
教えて頂いたTranslatableComponentを調べてみようと思います。

大変助かりました。
どうもありがとうございました。
nobody
ID:48d6e241
木を殴ってる
 
記事: 11
登録日時: 2018年2月14日(水) 14:45

1つ前へ次へ

Return to 質問:開発・制作関連

x