あなたは既にプレーヤーに警告した方法の外に保存する必要があります。 Map
はこれに最適です。さらに良いことに、あなたがそれらのEntities
private final Set<EntityPlayer> playersInRange = Collections
.newSetFromMap(new WeakHashMap<EntityPlayer, Boolean>());
void onMove() {
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) {
// make sure player is (no longer) in set
playersInRange.remove(player);
continue;
}
if (!playersInRange.contains(player)) {
playersInRange.add(player);
mc.thePlayer.addChatMessage("\2479[CAMB] \247e" + player.getEntityName()
+ " has entered your 20 block radius!");
}
}
}
}
}
をリークしたくないWeakHashMap
場合にはまた、再アラートのすべてのX時間に彼らと一緒に時間を格納することができます。
private static final long WAIT_BETWEEN_ALERTS = 30000;
private final WeakHashMap<EntityPlayer, Long> map = new WeakHashMap<EntityPlayer, Long>();
void onMove() {
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) {
// clear alerts
map.remove(player);
continue;
}
Long lastTimeAlerted = map.get(player);
long minimumLastAlert = System.currentTimeMillis() - WAIT_BETWEEN_ALERTS;
if (lastTimeAlerted == null || lastTimeAlerted < minimumLastAlert) {
map.put(player, System.currentTimeMillis());
mc.thePlayer.addChatMessage("\2479[CAMB] \247e" + player.getEntityName()
+ " has entered your 20 block radius!");
} // else, already alerted recently.
}
}
}
}
あなたは、彼らが再び検出半径、とだけのpingを入力したら、あなたは彼らが去る場合にのみpingにそれをしたいだろう再入力? – StephenTG
1.「ブール変数」について聞いたことがありますか? 2.プレーヤーが30分間離れて帰ってきたらどうなるでしょうか?プレーヤーはそれから警告を受けてはいけませんか? –
あなたが使用できるプレイヤーのための何らかのMovementListenerがある場合は、このコード全体をそこに移動することをお勧めします。 – Vulcan