【解決済み】Spigotプラグインについて【1.10】

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

【解決済み】Spigotプラグインについて【1.10】

投稿記事by PuuChan » 2017年1月31日(火) 13:45

今のコードだと1秒後にチェストが開いてしまいます。これの対処方法を教えてください。また、ArmorStandをデスポーンさせる方法を教えてください。
コード: 全て選択
@EventHandler
   public void onPlayerInteract(PlayerInteractEvent e){
      Action a = e.getAction();
      Player p = e.getPlayer();
      Block b = e.getClickedBlock();
      Location loc = e.getClickedBlock().getLocation();
      loc.add(0.5, 0, 0.5);
      Block serch = loc.getBlock();
      Block item =
      if(a == Action.RIGHT_CLICK_BLOCK && b.getType() == Material.CHEST){
         p.sendMessage("test");
         b.getLocation().getWorld().spawnParticle(Particle.NOTE, loc, 100, 10, 0, 10);
         Entity holo = loc.getWorld().spawnEntity(loc, EntityType.ARMOR_STAND);
         holo.setCustomNameVisible(true);
         holo.setGravity(false);
         holo.setCustomName("8");
         try {
            TimeUnit.SECONDS.sleep(1);
         } catch (InterruptedException e1) {
            // TODO 自動生成された catch ブロック
            e1.printStackTrace();
         }
         holo.setCustomName("7");
         if(serch == item){
            p.sendMessage("111");
            
         }
      }
   }
最後に編集したユーザー PuuChan [ 2017年2月03日(金) 03:11 ], 累計 1 回
PuuChan
ID:925dae29
水から上がったとこ
 
記事: 9
登録日時: 2016年2月18日(木) 20:49

  • (PostNo.294677)

Re: Spigotプラグインについて【1.10】

投稿記事by Lemon18 » 2017年1月31日(火) 15:44

PuuChan さんが書きました:今のコードだと1秒後にチェストが開いてしまいます。これの対処方法を教えてください。また、ArmorStandをデスポーンさせる方法を教えてください。


Thread#sleep()はサーバーまで止まってしまうのでそのようなことになります。
これを回避するにはBukkitRunnableを使えばできます。
アーマースタンドに関しては、Entity#remove()で、デスポーンできます。
Bukkitプラグインとか作ったり作らなかったり。
「どのOSでも使える」を目標に日本語入力ツールを作っています。良ければ見てください。
http://forum.minecraftuser.jp/viewtopic.php?f=36&t=31671


Twitter: https://twitter.com/Lemon1806
Minecraft: Applemon
Lemon18
ID:b66be5f3
石掘り
 
記事: 85
登録日時: 2015年6月05日(金) 22:42

  • (PostNo.294678)

Re: Spigotプラグインについて【1.10】

投稿記事by PuuChan » 2017年1月31日(火) 16:02

ありがとうございます。getBlockでブロックは取得できるのですが、Entityを取得したです。対処方法はありますか?
if(loc.getBlock().getType() == EntityType.ARMOR_STAND)今はこのようにしてますが、Entityが取得できる方法が見当つきません。

Lemon18 さんが書きました:Thread#sleep()はサーバーまで止まってしまうのでそのようなことになります。
これを回避するにはBukkitRunnableを使えばできます。
アーマースタンドに関しては、Entity#remove()で、デスポーンできます。
PuuChan
ID:925dae29
水から上がったとこ
 
記事: 9
登録日時: 2016年2月18日(木) 20:49

  • (PostNo.294685)

Re: Spigotプラグインについて【1.10】

投稿記事by Lemon18 » 2017年1月31日(火) 17:16

PuuChan さんが書きました:ありがとうございます。getBlockでブロックは取得できるのですが、Entityを取得したです。対処方法はありますか?
if(loc.getBlock().getType() == EntityType.ARMOR_STAND)今はこのようにしてますが、Entityが取得できる方法が見当つきません。


PlayerInteractEventではEntityの取得はできません。
その代わり、PlayerInteractEntityEventがあるのでそれを使ってください。
(左クリックならEntityDamageByEntityEventのはず...)

https://hub.spigotmc.org/javadocs/bukki ... Event.html
https://hub.spigotmc.org/javadocs/bukki ... Event.html
Bukkitプラグインとか作ったり作らなかったり。
「どのOSでも使える」を目標に日本語入力ツールを作っています。良ければ見てください。
http://forum.minecraftuser.jp/viewtopic.php?f=36&t=31671


Twitter: https://twitter.com/Lemon1806
Minecraft: Applemon
Lemon18
ID:b66be5f3
石掘り
 
記事: 85
登録日時: 2015年6月05日(金) 22:42

  • (PostNo.294865)

無事解決しました。ありがとうございます。

投稿記事by PuuChan » 2017年2月03日(金) 03:11

こんな感じで解決できました。

コード: 全て選択
@SuppressWarnings("deprecation")
   @EventHandler
   public void onPlayerInteract(PlayerInteractEvent e){
      Action a = e.getAction();
      Player p = e.getPlayer();
      Block b = e.getClickedBlock();
      Location loc = e.getClickedBlock().getLocation();
      loc.add(0.5, 1, 0.5);
      if(a == Action.RIGHT_CLICK_BLOCK && b.getType() == Material.CHEST ){
         final int count = Integer.parseInt(getConfig().getString("count"));
         final int count2 = count * 2;
         if(loc.getBlock().getTypeId() == 36){
            
         }else{
            loc.getBlock().setTypeId(36);
            loc.add(0, -2, 0);
            p.sendMessage(ChatColor.translateAlternateColorCodes('&', getConfig().getString("message")));
            ArmorStand holo = (ArmorStand) loc.getWorld().spawnEntity(loc, EntityType.ARMOR_STAND);
            holo.setCustomNameVisible(true);
            holo.setGravity(false);
            holo.setVisible(false);
            holo.setCustomName(String.valueOf(count));
            int l = 20;
            int c = count;
            int c2 = count2;
            for(int i = 1;i < c2; i++){
               c--;
               c2--;
               String str = String.valueOf(c);
               if(c == 0){
                  int t = l * i;
                  long tmp = Long.valueOf(t);
                  Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable(){
                     public void run(){
                        holo.setCustomName(str);
                        loc.add(0, 2, 0);
                        loc.getBlock().setTypeId(0);
                        holo.remove();
                     }
                  }, tmp);
               }else{
                  int t = l * i;
                  long tmp = Long.valueOf(t);
                  Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable(){
                     public void run(){
                        holo.setCustomName(str);
                     }
                  }, tmp);
               }
            }
         }
      }
   }
PuuChan
ID:925dae29
水から上がったとこ
 
記事: 9
登録日時: 2016年2月18日(木) 20:49


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

x