public final void spawnMonster(final MapleMonster monster, final int spawnType, final boolean overwrite) {
        if (this.getId() == 109010100 && monster.getId() != 9300166) {
            return;
        }
        monster.setMap(this);
        checkRemoveAfter(monster);

        if (monster.getId() == 9300166) {
            MapTimer.getInstance().schedule(new Runnable() {
                @Override
                public void run() {
                    broadcastMessage(MobPacket.killMonster(monster.getObjectId(), 2, false));
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException ex) {
                        System.out.println("Error spawning monster: " + ex);
                    }
                    removeMapObject(monster);
                }
            }, this.getId() == 109010100 ? 1500 /*Bomberman*/ : this.getId() == 910025200 ? 200 /*The Dragon's Shout*/ : 3000);
        }
        /*if (MoonlightRevamp.MoonlightRevamp) {
         MapleMonsterStats stats = MapleLifeFactory.getMonsterStats(monster.getId());
         OverrideMonsterStats overrideStats = new OverrideMonsterStats(monster.getHp() / MoonlightRevamp.monsterHpDivision, monster.getMp(), stats.getExp());
         monster.setOverrideStats(overrideStats);
         //monster.setHp(monster.getHp() / MoonlightRevamp.monsterHpDivision); //Isn't needed because of override stats
         stats.setPDRate(stats.isBoss() ? MoonlightRevamp.getBossPDRateMultipy(stats.getPDRate()) : (byte) (stats.getPDRate() + MoonlightRevamp.getPDRateAddition(stats.getPDRate())));
         stats.setMDRate(stats.isBoss() ? MoonlightRevamp.getBossMDRateMultipy(stats.getMDRate()) : (byte) (stats.getMDRate() + MoonlightRevamp.getMDRateAddition(stats.getMDRate())));
         }*/
        spawnAndAddRangedMapObject(monster, new DelayedPacketCreation() {
            @Override
            public final void sendPackets(MapleClient c) {
                if (GameConstants.isAzwanMap(c.getPlayer().getMapId())) {
                    c.getSession().write(MobPacket.spawnMonster(monster, monster.getStats().getSummonType() <= 1 || monster.getStats().getSummonType() == 27 || overwrite ? spawnType : monster.getStats().getSummonType(), 0, true));
                } else {
                    c.getSession().write(MobPacket.spawnMonster(monster, monster.getStats().getSummonType() <= 1 || monster.getStats().getSummonType() == 27 || overwrite ? spawnType : monster.getStats().getSummonType(), 0, false));
                }
            }
        });
        updateMonsterController(monster);

        this.spawnedMonstersOnMap.incrementAndGet();
    }