Add MagicOnMob MessageHandler

This commit is contained in:
david.indova@gmail.com
2019-04-26 12:49:32 -04:00
committed by Major
parent 16599dd231
commit bb352225f3
3 changed files with 62 additions and 0 deletions
+6
View File
@@ -71,6 +71,12 @@
<handler>org.apollo.game.message.handler.ItemVerificationHandler</handler> <handler>org.apollo.game.message.handler.ItemVerificationHandler</handler>
</chain> </chain>
</message> </message>
<message>
<type>org.apollo.game.message.impl.MagicOnMobMessage</type>
<chain>
<handler>org.apollo.game.message.handler.MagicOnMobVerificationHandler</handler>
</chain>
</message>
<message> <message>
<type>org.apollo.game.message.impl.NpcActionMessage</type> <type>org.apollo.game.message.impl.NpcActionMessage</type>
<chain> <chain>
@@ -0,0 +1,51 @@
package org.apollo.game.message.handler;
import org.apollo.game.message.impl.MagicOnMobMessage;
import org.apollo.game.model.World;
import org.apollo.game.model.entity.EntityType;
import org.apollo.game.model.entity.Mob;
import org.apollo.game.model.entity.MobRepository;
import org.apollo.game.model.entity.Player;
/**
* A verification {@link MessageHandler} for the {@link MagicOnMobMessage}.
*
* @author Tom
*/
public final class MagicOnMobVerificationHandler extends MessageHandler<MagicOnMobMessage>{
/**
* Creates the MessageListener.
*
* @param world The {@link World} the {@link MagicOnMobMessage} occurred in.
*/
public MagicOnMobVerificationHandler(World world) {
super(world);
}
@Override
public void handle(Player player, MagicOnMobMessage message) {
int index = message.getIndex();
MobRepository<? extends Mob> repository;
if (message.getType() == EntityType.NPC) {
repository = world.getNpcRepository();
} else if (message.getType() == EntityType.PLAYER) {
repository = world.getPlayerRepository();
} else {
throw new IllegalStateException("Invalid mob type for message: " + message.toString());
}
if (index < 0 || index >= repository.capacity()) {
message.terminate();
return;
}
Mob mob = repository.get(index);
if (mob == null || !player.getPosition().isWithinDistance(mob.getPosition(), player.getViewingDistance() + 1)) {
// +1 in case it was decremented after the player clicked the action.
message.terminate();
}
}
}
@@ -1,5 +1,6 @@
package org.apollo.game.message.impl; package org.apollo.game.message.impl;
import com.google.common.base.MoreObjects;
import org.apollo.game.model.entity.EntityType; import org.apollo.game.model.entity.EntityType;
import org.apollo.net.message.Message; import org.apollo.net.message.Message;
@@ -65,4 +66,8 @@ public abstract class MagicOnMobMessage extends Message {
return spellId; return spellId;
} }
@Override
public String toString() {
return MoreObjects.toStringHelper(this).add("type", getType()).add("index", getIndex()).add("spellId", getSpellId()).toString();
}
} }