【総合】トピック立てるまでもない質問【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
石炭掘り
 
記事: 246
登録日時: 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
掘り廃人
 
記事: 2461
登録日時: 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
掘り廃人
 
記事: 2461
登録日時: 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
石炭掘り
 
記事: 246
登録日時: 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
石炭掘り
 
記事: 246
登録日時: 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
ダイヤモンド掘り
 
記事: 825
登録日時: 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
石炭掘り
 
記事: 246
登録日時: 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
ダイヤモンド掘り
 
記事: 825
登録日時: 2013年3月26日(火) 10:25

1つ前へ

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

x