6

Minecraft 用のテキストベースのレーダーを作成しています。プレイヤーがあなたの 20 ブロック以内に来ると、チャットで伝えます。今のところ、それはチャットをスパムします。そのプレイヤーについて一度だけチャットするようにするにはどうすればよいですか? ゲームをプレイしなくても、わかりやすいはずです。

if (Camb.radar)
{
  for (Entity e: (List < Entity > ) mc.theWorld.loadedEntityList)
  {
    if (e instanceof EntityPlayer)
    {
      EntityPlayer player = (EntityPlayer) e;
      if (player == mc.thePlayer || mc.thePlayer.getDistanceToEntity(e) > 20.0)
        continue;
      mc.thePlayer.addChatMessage("\2479[CAMB] \247e" + player.getEntityName() + " has entered your 20 block radius!"); //Write to chat, only want this line done once for every player
    }
  }
}
4

6 に答える 6

2

近くのプレイヤーのリストまたは配列を作成してみて、20 ブロック以内にいるときにそのリストに追加することができます。範囲内にエンティティが見つかったら、リストにあるかどうかを確認します。そうでない場合は、通知してリストに追加します。そうであれば、ゲームを開始してください:)

リストからアイテムを削除するには、リスト内のエンティティを確認し、それらをプレイヤーの位置と比較します。範囲外の場合は削除してください。これは、別のループで発生する必要がある場合があります。

于 2013-08-01T18:54:29.770 に答える
0

detectedgetter/setter メソッドを使用してブール値フラグを EntityPlayer に追加します。

ループ内:

if (Camb.radar) {
    for (....) {
        if (e instanceof EntityPlayer) {
            EntityPlayer player = (EntityPlayer) e;
            if (player.isDetected() || player == mc.thePlayer || mc.thePlayer.getDistanceToEntity(e) > 20.0) {
                continue;
            }

            if (!player.isDetected()) {
                mc.thePlayer.addChatMessage(....); 
                player.setDetected(true); // reset this flag when player goes out of radar
            }
        }
    }
}    
于 2013-08-01T19:12:23.433 に答える