È necessario memorizzare al di fuori del metodo che è già stato segnalato al giocatore. A Map
è perfetto per questo. Ancora meglio un WeakHashMap
nel caso in cui non si vuole far trapelare quelli 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!");
}
}
}
}
}
Si potrebbe anche memorizzare un tempo con loro per re-avviso ogni volta 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.
}
}
}
}
Vorresti che solo ping voi una volta che entrano di nuovo il raggio di rilevamento, e solo ping se ne vanno un reinserimento? – StephenTG
1. Hai mai sentito parlare di una 'variabile booleana '? 2. Cosa succede se il giocatore va via per 30 minuti e poi torna indietro? Il giocatore non dovrebbe essere avvisato allora? –
Se c'è un tipo di MovementListener per i giocatori che puoi usare, ti suggerirei di spostare l'intero bit di codice lì dentro. – Vulcan